1

SQL Server 2008 に SQL テーブルがあり、その日付に依存する最新のレコードを取得したいと考えています。

私は次のようにクエリを書きました

  SELECT TOP 1 * 
    FROM ProductPrice
   WHERE ProductID = 1698
     AND EffectiveFrom <= '1/31/2013'
ORDER BY EffectiveFrom DESC

データベースには、日付 2013-01-31 12:12:49.000 を含むレコードがあります。

上記のクエリが 1 つのレコードを返すことを期待していますが、何も返されません。クエリで何を変更すればよいですか?

4

4 に答える 4

1

重要なのは、日付が日時であるということです...キャスト/変換によってタイムスタンプを取り除くか、where句を変更しない限り。2013-01-01 HH:MM:SSは常になります> 01/01/2013

  SELECT TOP 1 * 
    FROM ProductPrice
   WHERE ProductID = 1698
     AND CONVERT(CHAR(8), EffectiveFrom, 112) <= '20130101'
ORDER BY EffectiveFrom DESC 
于 2013-01-31T07:15:44.077 に答える
1

テーブルのデータには日付だけでなく時間も含まれているため

  SELECT TOP 1 * 
    FROM ProductPrice
   WHERE ProductID = 1698
     AND CAST(EffectiveFrom AS date) <= '1/31/2013'
ORDER BY EffectiveFrom DESC

また

  SELECT TOP 1 * 
    FROM ProductPrice
   WHERE ProductID = 1698
     AND EffectiveFrom <= DATEADD(SECOND, 86399, '1/31/2013')
ORDER BY EffectiveFrom DESC 
于 2013-01-31T07:16:41.923 に答える
0

してみてください:

  SELECT TOP 1 * 
    FROM ProductPrice
   WHERE ProductID = 1698
     AND EffectiveFrom <= (CONVERT(DATETIME, '1/31/2013') + 1)
ORDER BY EffectiveFrom DESC

日時の値2013-01-31 12:12:49.000が。より大きいため、選択されていません1/31/2013

于 2013-01-31T07:22:10.650 に答える
0

問題は、'1/31/2013 00:00' を '1/31/2013 12:12' と比較していることです。これはその値よりも小さい値です。クエリを次のようなものに変換する必要があります。

SELECT TOP 1 *  
FROM ProductPrice 
WHERE  ProductID = 1698 
   AND CONVERT(DATE,EffectiveFrom) <= '1/31/2013' 
ORDER BY EffectiveFrom DESC 
于 2013-01-31T07:17:27.410 に答える