sql >> データベース >  >> RDS >> Sqlserver

日付文字列を変換して検証するための最良の方法

    まず、SQL Server 2005を使用しているため、可能性のあるコードを配置する必要があります。 BEGIN TRY.....END TRY BEGIN CATCH....END CATCHに失敗します ブロック-T-SQLのブロックを試して/キャッチしてください!

    第二に、すべての日付操作について、私は常に SQLServerで設定されている現在の日付形式に関係なく機能するISO-8601形式を使用してください。

    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は日付の処理がかなり弱いです。おそらく、SQL Server内でCLRアセンブリを使用して、.NETのはるかに豊富な日付処理機能を利用することが理にかなっている拡張ポイントかもしれません??

    マーク

    PS:私が知っていたISO-8601形式のようですYYYY-MM-DDはSQLServerで常に機能するとは限りません-BooksOnlineが説いているように見えます。代わりにYYYYMMDDまたはYYYY-MM-DDTHH:MM:SSを使用してください。
    ありがとう、gbn!



    1. likeおよびワイルドカードを使用したMySQL検索の最適化

    2. MySQLでサーバーによってサポートされている照合を見つける方法

    3. MySQLから整数列と数値列をPHPの整数と数値として返すにはどうすればよいですか?

    4. アイテムxにアクセスできるように文字列を分割するにはどうすればよいですか?