2017-02-28 5 views
0

における演算子のように使用して、私はSQL Serverの

select * 
from tbltask 
where taskstartdate = '2017-02-13 15:23:00.000' 

以下このクエリが実行されていると私は、適切なデータを取得していますが、私はので、代わりに=

likeコマンドを使用するようにSQLクエリを持っています私は2017年

のデータを取得していますこれで、次の

SELECT * 
FROM tblTask 
WHERE TaskStartDate LIKE '%2017%' 

に私のクエリを変更しました

そして、これは私の行

038815c1-d8b3-43c8-bd28-1bc8cf7c0688 101 30b3af65-3222-42c4-8d6e-25ec275c5ba1 test 2017-02-13 15:23:00.000 2017-02-13 15:23:00.000 testing 2017-02-13 15:23:00.000 NULL  WIP 0 0 2 0 1 7788e4b1-e702-4c8a-9dfc-6ce7081f0a93 2017-02-13 15:47:14.747 0 NULL 30b3af65-3222-42c4-8d6e-25ec275c5ba1 1 NULL 0 30b3af65-3222-42c4-8d6e-25ec275c5ba1 0 Low ~/TaskFile/error-bg.jpg 0 NULL 0 0,0,0,0,0,0 0 NULL 

の一つであるが、私は特定の日付のデータを取得したいので、私は、次のと私は

上に示した行のデータを取得するクエリを再変更
SELECT * 
FROM tblTask 
WHERE TaskStartDate LIKE '%2017-02-13 15:23:00.000%' 

が、これは私にブランクデータを示しているが、

私のようなクエリで何が悪いのでしょうか?

+0

そのことはお勧めできません以下のクエリを使用します。 –

答えて

0

DATEPART機能を使用して日付の一部を抽出できます。また、あなたが達成しようとしているかについてのあなたのクエリをより明確にする必要があります。

select * 
    from tbltask 
    where 
     DATEPART(year,taskstartdate)=2017 and 
     DATEPART(month,taskstartdate) between 1 and 3 

(ありなMONTHとYEAR、具体的に名前の関数は、もありますが、それがアクセスすることができますので、私は一貫性のためDATEPARTを好みます

日付時刻をあらゆる種類の文字列形式にすることを避けるようにしてください。文字列として扱うことは、私たちが遭遇する最大のエラーの原因の1つです。あなたのシナリオでは、次のコードを使用してくださいに応じLike演算子を使用するための

0

: -

SELECT * 
FROM #tblTask 
WHERE convert(datetime2,TaskStartDate) LIKE '%2017-02-13 15:23:00.000%' 

は:日付とLike演算子を使用する代わりにDATEPARTを使用し、ベストプラクティスではありません。

0

使用してください。あなたの問題を解決します。

CAST(TaskStartDate AS DATETIME) = CAST('2017-02-13 15:23:00.000'AS DATETIME) 
0

あなたはdatetime型の列にオペレータが良くないように適用すると、その範囲

SELECT * 
FROM tblTask 
WHERE TaskStartDate BETWEEN '2017-02-13 00:00:00.000' AND '2017-02-13 23:59:59.000' 
0

の間でデータを見つけるために、BETWEENを使用することができます。インデックスは使用しません。 like演算子を使用すると、以下のようなクエリを実行する必要があります。

select * 
from tbltask 
where CONVERT(CHAR(8), taskstartdate, 112) like '%20170213%' 

注:上記のクエリは、時間に関係なく日付が2017-02-13のすべての行を選択します。

より良いパフォーマンスを得るために特定の日付を取得するときに `LIKE`演算子を使用する

select * 
from tbltask 
where taskstartdate>= '2017-02-13' and taskstartdate<'2017-02-14'