sql >> Database >  >> RDS >> Sqlserver

Conversiefout bij het converteren van 'nvarchar' naar 'datetime' in sql-server

Er worden veel formaten ondersteund door SQL Server - zie de MSDN Books Online op CAST en CONVERT . De meeste van die indelingen zijn afhankelijk op welke instellingen je hebt - daarom kunnen deze instellingen soms werken - en soms niet.

De manier om dit op te lossen is door het (enigszins aangepaste) ISO-8601 datumformaat te gebruiken dat wordt ondersteund door SQL Server - dit formaat werkt altijd - ongeacht uw SQL Server-taal en datumnotatie-instellingen.

De ISO-8601-indeling wordt ondersteund door SQL Server komt in twee smaken:

  • YYYYMMDD voor alleen data (geen tijdgedeelte); noteer hier:geen streepjes! , dat is heel belangrijk! YYYY-MM-DD is NIET onafhankelijk van de datumnotatie-instellingen in uw SQL Server en zal NIET werk in alle situaties!

of:

  • YYYY-MM-DDTHH:MM:SS voor datums en tijden - let hier op:dit formaat heeft streepjes (maar ze kunnen worden weggelaten), en een vaste T als scheidingsteken tussen het datum- en tijdgedeelte van uw DATETIME .

Dit is geldig voor SQL Server 2000 en nieuwer.

Als u SQL Server 2008 of nieuwer gebruikt en de DATE datatype (alleen DATE - niet DATETIME !), dan kun je inderdaad ook de YYYY-MM-DD . gebruiken formaat en dat zal ook werken met alle instellingen in uw SQL Server.

Vraag me niet waarom dit hele onderwerp zo lastig en enigszins verwarrend is - zo is het gewoon. Maar met de YYYYMMDD formaat, zou het goed moeten zijn voor elke versie van SQL Server en voor elke taal- en datumindeling in uw SQL Server.

De aanbeveling voor SQL Server 2008 en nieuwer is het gebruik van DATE als u alleen het datumgedeelte nodig heeft, en DATETIME2(n) wanneer u zowel datum als tijd nodig heeft. Probeer de DATETIME . uit te faseren datatype indien ooit mogelijk



  1. Volgorde op datum, voeg datum voor en datum toe na postgresql met subquery

  2. Logroteren om bestanden met datumstempel op te schonen

  3. Meerdere tabellen met transactie invoegen in mysql

  4. Is er een verschil tussen SQL Server Express (2012) en LocalDB?