Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

най-добрият начин за конвертиране и валидиране на низ от дата

На първо място, тъй като използвате SQL Server 2005, трябва да поставите своя код, който може неуспешно в BEGIN TRY.....END TRY BEGIN CATCH....END CATCH блокове - изпробвайте/улавяйте блокове за T-SQL!

Второ, за всички манипулации на дати, бихвинаги използвайте формат ISO-8601, който ще работи независимо от това какъв формат на текущата дата е зададен в SQL Server.

Форматът ISO-8601 е YYYYMMDD само за дати или YYYY-MM-DDTHH:MM:SS за дата с час - така че ще напиша вашия код като:

BEGIN TRY
  SET @Source='07152009'
  SET @Temp = RIGHT(@Source, 4) +             -- YYYY
              LEFT(@Source, 2) +              -- MM
              SUBSTRING(@Source, 3, 2)        -- DD

  IF ISDATE(@Temp)!=1
  BEGIN
      RAISERROR('ERROR, invalid date',16,1)
  END

  SET @Destination = CAST(@Temp AS DATETIME)
END TRY
BEGIN CATCH
      -- handle error if something bombs out
END CATCH

Не разчитайте на зададен определен формат за дата!! Изпратете ми кода си и ще го пробвам на швейцарско-германска система - почти гарантирам, че ще се счупи, ако сляпо приемете "en-US" и по този начин "mm/dd/yyyy" - това е не силно> една и съща настройка навсякъде на тази планета.

За съжаление SQL Server е доста слаб за обработка на дати – може би това може да е точка на разширение, където използването на CLR сборка в SQL Server би имало смисъл, за да се възползвате от много по-богатите функции за обработка на дати в .NET??

Марк

PS:Изглежда, че форматът ISO-8601, който знаех, ГГГГ-ММ-ДД, не винаги работи в SQL Server - противно на това, което изглежда проповядва Books Online. Вместо това използвайте YYYYMMDD или YYYY-MM-DDTHH:MM:SS.
Благодаря, gbn!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. изолиране на подниз в низ преди символ в SQL Server 2008

  2. Как да извика съхранена процедура в изглед?

  3. Как да се свържа с mssql с помощта на pdo през PHP и Linux?

  4. INSERT INTO срещу SELECT INTO

  5. Изчислете работното време между две дати