我想在幾天內搜索特定時間。
我有一個視圖,我將 DATETIME 轉換為這樣的時間cast(dateRecorded AS TIME) AS TME
select * from myView where TME = '08:44:43'- 沒有結果
select * from myView where TME > '08:44:43'- 我在 08:44:43 得到結果
但我需要這里的確切時間,而不是那個日期之后的所有時間。
uj5u.com熱心網友回復:
問題將是資料型別中存在的毫秒數DateTime
declare @datetime datetime = '20220311 11:26:01:123'
declare @time_1 time = convert(time, @datetime)
declare @time_2 time = convert(time, convert(datetime2(0), @datetime))
declare @time_3 time(0) = convert(time, @datetime)
現在如果我選擇所有這些變數
select @datetime, @time_1, @time_2, @time_3
我明白了
| 第 1 列 | 第 2 列 | 第 3 列 | 第 4 欄 |
|---|---|---|---|
| 2022 年 11 月 3 日 11:26:01 | 11:26:01.1233333 | 11:26:01.0000000 | 11:26:01 |
如您所見,SSMS 不會在第一列中向您顯示毫秒數,但它們仍然存在
datetime2(0)所以我們需要使用從或從轉換的時間變數time(0)
select 1 where @time_1 = '11:26:01'
union all
select 2 where @time_2 = '11:26:01'
union all
select 3 where @time_3 = '11:26:01'
這將導致
| 第 1 列 |
|---|
| 2 |
| 3 |
未找到 @time_1 中的值,因為它還有毫秒,因此不等于 '11:26:01'
如果您可以將datetime列更改為,datetime2(0)那么您的問題將在不更改查詢的情況下得到解決,否則您將不得不像我的示例中那樣使用轉換。
uj5u.com熱心網友回復:
問題是 DataGrip 默認會裁剪幾毫秒,而不會發出警告。

像這樣轉換為時間得到了我想要的結果 CONVERT(TIME(0), [dateRecorded]) AS TME
uj5u.com熱心網友回復:
如前所述,您需要忽略毫秒。一種簡單的語法:
select * from myView where '08:44:44' > TME > '08:44:43';
要么
select * from myView where DATEDIFF ( ss , TME , '08:44:43' ) < 1;
這將允許前后最多一秒鐘
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/441789.html
上一篇:將資料型別varchar轉換為bigint時出錯-SQLServer
下一篇:如何在SQL中按年按月排列輸出?
