sql >> Databáze >  >> RDS >> Sqlserver

nejlepší způsob, jak převést a ověřit řetězec data

Za prvé, protože používáte SQL Server 2005, měli byste vložit svůj kód, který může nezdaří se BEGIN TRY.....END TRY BEGIN CATCH....END CATCH bloky - zkuste/chytněte bloky pro T-SQL!

Zadruhé, pro veškerou manipulaci s datem bych vždy použijte formát ISO-8601, který bude fungovat bez ohledu na to, jaký aktuální formát data je nastaven na serveru SQL.

Formát ISO-8601 je YYYYMMDD pouze pro data nebo YYYY-MM-DDTHH:MM:SS pro datum s časem - takže bych váš kód napsal 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

Nespoléhejte na to, že bude nastaven nějaký konkrétní formát data!! Pošlete mi svůj kód a já ho vyzkouším na švýcarsko-německém systému – téměř garantuji, že se rozbije, pokud budete slepě předpokládat „en-US“ a tedy „mm/dd/yyyy“ – není silný> stejné nastavení všude na této planetě.

Bohužel SQL Server zpracovává data poměrně slabě – možná by to mohl být bod rozšíření, kde by použití sestavení CLR uvnitř SQL Serveru dávalo smysl, aby bylo možné využít mnohem bohatší funkce zpracování dat v .NET ??

Marc

PS:Zdá se, že formát ISO-8601, který jsem znal, RRRR-MM-DD ne vždy funguje na serveru SQL Server – na rozdíl od toho, co káže Books Online. Místo toho použijte RRRRMMDD nebo RRRR-MM-DDTHH:MM:SS.
Díky, gbn!



  1. Jak získat velikost databáze MySQL pro vaši databázi?

  2. SQL Reference pro začátečníky

  3. Jak připojit Postgres k serveru localhost pomocí pgAdmin na Ubuntu?

  4. rychlý výběr náhodného řádku z velké tabulky v mysql