Formát datumu při INSERT rubrika: Databáze: SQL

1 dejmad
položil/-a 18.10.2017
 
upravil/-a 18.10.2017

Ahoj,

potýkám se z problémem INSERT do MSSQL.

Mám v MSSQL tabulku

CREATE TABLE StavySkladyHistory (
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [ID_Sklad] [int] NOT NULL,
    [Number] [nchar](10) NOT NULL,
    [Name] [nchar](100) NOT NULL,
    [ID_Parent] [int] NOT NULL,
    [ID_Level] [int] NOT NULL,
    [SkladSUM] [decimal](18, 3) NOT NULL,
    [SnapshotDate] [datetime] NOT NULL,
PRIMARY KEY CLUSTERED
(

Do které každý den ukládám stav skladu pomocí SQL UPDATE

$sql = "INSERT INTO StavySkladyHistory (ID_Sklad, Number, Name,ID_Parent,ID_Level,SkladSUM,SnapshotDate) VALUES
        (".$data['ID']."
        ,'".$data['Number']."'
        ,'".$data['Name']."'
        ,".$data['ID_Parent']."
        ,".$data['ID_Level']."
        ,".$data['HodnotaSKladu']."
        ,'".$datum."')";

Kdy datum je $datum = date("Y-d-m H:i:s");

Všiměte si "Y-d-m H:i:s"

Dotaz:
Proč musím insertovat datum ve formátu "Y-d-m H:i:s" a ne tak, jak bych očekával "Y-m-d"
Data v tabulce jsou ovšem ve formátu Y-m-d:

SELECT distinct [SnapshotDate]   FROM StavySkladyHistory   order by  [SnapshotDate]
2017-10-14 20:00:01.000
2017-10-15 20:00:01.000
2017-10-16 20:00:01.000
2017-10-17 20:00:37.000

S "Y-m-d H:i:s" mi to přestane fungovat každého 13-31. v měsíci a SQL server mi vynadá, že špatný formát datumu
Děkuji za případné vysvětlení - hlava ani gůgl mi to nebere :(,
D

Komentáře

  • harrison314 : Pozor na SQL injection. 18.10.2017
  • kfrajtak : Takze spis MySQL, ze? Pokud mas moznost pouzij parametry a format neres. 20.10.2017
odkaz Vyřešeno
2 bedlaj26
odpověděl/-a 18.10.2017
 
upravil/-a 18.10.2017

Formát datumu je nastavený na databázové sessioně a většina SQL editorů nastaví formát datumu na formát, který máš v nastavení už při otevírání spojení. Předpokládám, že ten select jsi nedělal z PHP, ale z nějakého editoru a proto se to vrací v jiném formátu.

SnapshotDate máš ve formátu datetime. Jestli nepotřebuješ časovou složku, použij date nebo smalldate.

Defaultní formát datumu závisí na nastavení jazyku na MSSQL serveru. Změnit to můžeš při otevírání databázového spojení přes SET DATEFORMAT ymd; Nebo si můžeš změnit jazyk na nějaký vhodnější. Výpis všech jazyků včetně jejich formátu datumů získáš přes sp_helplanguage;.

Aktuální formát datumu a jazyk zjistíš přes select s.date_format, s.language from   sys.dm_exec_sessions s where s.session_id = @@SPID; . Zkus si to spustit ze svého PHP kódu a z SQL editoru a uvidíš rozdíl.

Pro zobrazení všech 7 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.