Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

najlepszy sposób na konwersję i walidację ciągu daty

Po pierwsze, ponieważ używasz SQL Server 2005, powinieneś umieścić swój kod, który może nie powiodło się w BEGIN TRY.....END TRY BEGIN CATCH....END CATCH bloki - spróbuj/złap bloki dla T-SQL!

Po drugie, przy wszystkich manipulacjach datami zawsze użyj formatu ISO-8601, który będzie działał niezależnie od bieżącego formatu daty ustawionego w SQL Server.

Format ISO-8601 to YYYYMMDD dla samych dat lub YYYY-MM-DDTHH:MM:SS dla daty z godziną - więc napisałbym twój kod jako:

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

Nie polegaj na ustawianiu żadnego konkretnego formatu daty!! Wyślij mi swój kod, a wypróbuję go w systemie szwajcarsko-niemieckim – prawie gwarantuję, że się zepsuje, jeśli ślepo założysz „en-US”, a więc „mm/dd/rrrr” – to nie to samo ustawienie na całym świecie.

Niestety SQL Server jest raczej słaby w obsłudze dat - może to może być punkt rozszerzenia, w którym użycie zestawu CLR wewnątrz SQL Server miałoby sens, aby skorzystać z dużo bogatszych funkcji obsługi dat w .NET ??

Marek

PS:wygląda na to, że format ISO-8601, o którym wiedziałem, RRRR-MM-DD nie zawsze działa w SQL Server - w przeciwieństwie do tego, co głosi Books Online. Zamiast tego użyj RRRRMMDD lub RRRR-MM-DDTHH:MM:SS.
Dziękujemy, 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. Uzyskaj pierwszy dzień tygodnia w SQL Server

  2. SQL Server Wyrażenia regularne w T-SQL

  3. Jak wykorzystać zmienną do nazwy bazy danych w T-SQL?

  4. Mapowanie kluczy złożonych przy użyciu kodu EF w pierwszej kolejności

  5. Jak utworzyć klucz obcy w SQL Server?