none
DATETIME型の列を取得する場合の整形方法を教えて頂けませんか? RRS feed

  • 質問

  • SQL Server2000を使用しています。

     

    DATETIME型の列に対してSELECT文を実行しています。
    列の値は「2008-07-25 22:27:41.390」というように値が登録されているのですが、
    このデータに対して「2008-07-25」と日付が一致することを条件に
    値を取得したいと思っています。

     

    スマートな方法がわからず今は以下のように取得しています。

    Code Snippet
    SELECT
     *
    FROM
     TARGET_DATE BETWEEN '2008/07/25 0:00:00.000' AND '2008/07/25 23:59:59.999'

     

     

    範囲指定ではなく、日付の一致で取得できたらと考えているのですが、
    何かよい方法はございませんか?
    もしよろしければご教示下さい。

     

    よろしくお願い致します。

     

     

    2008年7月25日 14:34

回答

  • convert関数を使う方法があります。

     

    CONVERT(varhcar,TARGET_DATE,112) BETWEEN '2008/07/25' AND '2008/07/25'

     

    (参考)

    CAST および CONVERT (Transact-SQL)
    http://msdn.microsoft.com/ja-jp/library/ms187928.aspx

    2008年7月25日 15:12
  • こんにちは、naginoです。

     

    既にtrapemiya様が回答されていますが、他に以下の方法もあります。

     

    -1.日付型の精度を気にしなくて済み、インデックスの効果が期待できる方法

    '2008-07-25' <= TARGET_DATE AND TARGET_DATE < '208-07-26'

     

    -2.趣旨が理解しやすい方法

    CONVERT(varchar, TARGET_DATE, 112) = '20080725'

     

    ご参考まで。
    2008年7月25日 15:54

すべての返信

  • convert関数を使う方法があります。

     

    CONVERT(varhcar,TARGET_DATE,112) BETWEEN '2008/07/25' AND '2008/07/25'

     

    (参考)

    CAST および CONVERT (Transact-SQL)
    http://msdn.microsoft.com/ja-jp/library/ms187928.aspx

    2008年7月25日 15:12
  • こんにちは、naginoです。

     

    既にtrapemiya様が回答されていますが、他に以下の方法もあります。

     

    -1.日付型の精度を気にしなくて済み、インデックスの効果が期待できる方法

    '2008-07-25' <= TARGET_DATE AND TARGET_DATE < '208-07-26'

     

    -2.趣旨が理解しやすい方法

    CONVERT(varchar, TARGET_DATE, 112) = '20080725'

     

    ご参考まで。
    2008年7月25日 15:54
  • trapemiyaさん、naginoさん

    ご回答ありがとうございます。

     

    無事解決できました。

    1番の方法を使用しましたが、

    2案ご提示頂きとても勉強になりました。

    必要に応じて使い分けようと思います。

     

    ありがとうございました。

    2008年7月26日 7:28