Ⅰ sql 日期比較計算
case when Date>sysdate then substr(date,1,4)-substr(sysdate,1,4)||'年'||substr(date,4,2)-substr(sysdate,4,2)||'月'
when date like '200803' then '0年0月'
改成這樣就OK了
case when Date>sysdate then substr(date,1,4)-substr(sysdate,1,4)||'年'||abs(substr(date,4,2)-substr(sysdate,4,2))||'月'
when date like '200803' then '0年0月'
那就再改
case when Date>sysdate and substr(date,1,4)>=substr(sysdate,1,4)
and substr(date,4,2)>substr(sysdate,4,2) then substr(date,1,4)-substr(sysdate,1,4)||'年'||abs(substr(date,4,2)-substr(sysdate,4,2))||'月'
when substr(date,1,4)>substr(sysdate,1,4)
and substr(date,4,2)<substr(sysdate,4,2) then substr(date,1,4)-substr(sysdate,1,4)-1||'年'||(substr(date,4,2)+12-substr(sysdate,4,2))||'月'
when date like '200803%' then '0年0月' end
哥們,你那as test 沒錯,但是case when 後面一定要有end
將end 加上再看看
Ⅱ sql存儲過程中時分秒字元串怎麼比較大小 如08:30:00 與13:00:00怎麼比較
oracle 中字元串日期類型是可以直接比較的,如:
select * from scott.emp where '08:30:00'<'13:00:00'
但是如果你要用一張表中的時間欄位進行比較時,必須使用to_date()函數,如:
select * from scott.emp where hiredate<to_date('2012.01.01 13:00:00','yyyy.mm.dd hh24:mi:ss')
Ⅲ sql語句中怎樣比較兩個日期的大小
個人感覺用不等號比較日期非常不可取,應該用datediff函數,關於該函數的具體使用說明見sql server幫助。這個函數可以在sql語句中使用——如果直接用不等號就能比較日期,sql語法中干嗎還要定義這個函數呢?所以,使用datediff是比較日期的最科學的方法。
以下是我從sql server幫助中摘錄的部分,你也可以直接查看sql server幫助。
DATEDIFF
返回跨兩個指定日期的日期和時間邊界數。
語法
DATEDIFF ( datepart , startdate , enddate )
參數
datepart
是規定了應在日期的哪一部分計算差額的參數。下表列出了 Microsoft® SQL Server™ 識別的日期部分和縮寫。
日期部分 縮寫
year yy, yyyy
quarter qq, q
Month mm, m
dayofyear dy, y
Day dd, d
Week wk, ww
Hour hh
minute mi, n
second ss, s
millisecond ms
startdate
是計算的開始日期。startdate 是返回 datetime 或 smalldatetime 值或日期格式字元串的表達式。
因為 smalldatetime 只精確到分鍾,所以當用 smalldatetime 值時,秒和毫秒總是 0。
如果您只指定年份的最後兩位數字,則小於或等於"兩位數年份截止期"配置選項的值的最後兩位數字的數字所在世紀與截止年所在世紀相同。大於該選項的值的最後兩位數字的數字所在世紀為截止年所在世紀的前一個世紀。例如,如果 two digit year cutoff 為 2049(默認),則 49 被解釋為 2049,2050 被解釋為 1950。為避免模糊,請使用四位數的年份。
有關時間值指定的更多信息,請參見時間格式。有關日期指定的更多信息,請參見 datetime 和 smalldatetime。
enddate
是計算的終止日期。enddate 是返回 datetime 或 smalldatetime 值或日期格式字元串的表達式。
返回類型
integer
注釋
startdate 是從 enddate 減去。如果 startdate 比 enddate 晚,返回負值。
當結果超出整數值范圍,DATEDIFF 產生錯誤。對於毫秒,最大數是 24 天 20 小時 31 分鍾零 23.647 秒。對於秒,最大數是 68 年。
計算跨分鍾、秒和毫秒這些邊界的方法,使得 DATEDIFF 給出的結果在全部數據類型中是一致的。結果是帶正負號的整數值,其等於跨第一個和第二個日期間的 datepart 邊界數。例如,在 1 月 4 日(星期日)和 1 月 11 日(星期日)之間的星期數是 1。
示例
此示例確定在 pubs 資料庫中標題發布日期和當前日期間的天數。
USE pubs
GO
SELECT DATEDIFF(day, pubdate, getdate()) AS no_of_days
FROM titles
GO
Ⅳ SQL里有datetime欄位的數據怎麼比較
datediff(day,firstdate,seconddate)
DateDiff DateDiff: SQL server函數
返回 Variant (Long) 的值,表示兩個指定日期間的時間間隔數目。
語法
DateDiff(interval, date1, date2[, firstdayofweek[, firstweekofyear]])
DateDiff 函數語法中有下列命名參數:
部分 描述
interval 必要。字元串表達式,表示用來計算date1 和 date2 的時間差的時間間隔
Date1□date2 必要;Variant (Date)。計算中要用到的兩個日期。
Firstdayofweek 可選。指定一個星期的第一天的常數。如果未予指定,則以星期日為第一天。
firstweekofyear 可選。指定一年的第一周的常數。如果未予指定,則以包含 1 月 1 日的星期為第一周。
設置
interval 參數的設定值如下:
設置 描述
yyyy 年
q 季
m 月
y 一年的日數
d 日
w 一周的日數
ww 周
h 時
n 分鍾
s 秒
firstdayofweek 參數的設定值如下:
常數 值 描述
vbUseSystem 0 使用 NLS API 設置。
vbSunday 1 星期日(預設值)
vbMonday 2 星期一
vbTuesday 3 星期二
vbWednesday 4 星期三
vbThursday 5 星期四
vbFriday 6 星期五
vbSaturday 7 星期六
常數 值 描述
vbUseSystem 0 用 NLS API 設置。
vbFirstJan1 1 從包含 1 月 1 日的星期開始(預設值)。
vbFirstFourDays 2 從第一個其大半個星期在新的一年的一周開始。
vbFirstFullWeek 3 從第一個無跨年度的星期開始。
說明
DateDiff 函數可用來決定兩個日期之間所指定的時間間隔數目。例如,可以使用 DateDiff 來計算兩個日期之間相隔幾日,或計算從今天起到年底還有多少個星期。
為了計算 date1 與 date2 相差的日數,可以使用「一年的日數」(y) 或「日」(d)。當 interval 是「一周的日數」(w) 時,DateDiff 返回兩日期間的周數。如果 date1 是星期一,DateDiff 計算到 date2 為止的星期一的個數。這個數包含 date2 但不包含 date1。不過,如果 interval 是「周」(ww),則 DateDiff 函數返回兩日期間的「日歷周」數。由計算 date1 與 date2 之間星期日的個數而得。如果 date2 剛好是星期日,則 date2 也會被加進 DateDiff 的計數結果中;但不論 date1 是否為星期日,都不將它算進去。
如果 date1 比 date2 來得晚,則 DateDiff 函數的返回值為負數。
firstdayofweek 參數會影響使用時間間隔符號 「W」 或 「WW」 計算的結果。
如果 date1 或 date2 是日期文字,則指定的年份成為該日期的固定部分。但是,如果 date1 或 date2 用雙引號 (" ") 括起來,且年份略而不提,則在每次計算表達式 date1 或 date2 時,當前年份都會插入到代碼之中。這樣就可以書寫適用於不同年份的程序代碼。
在計算 12 月 31 日和來年的 1 月 1 日的年份差時,DateDiff 返回 1 表示相差一個年份,雖然實際上只相差一天而已。
示例
此示例確定在 pubs 資料庫中標題發布日期和當前日期間的天數。
USE pubsGOSELECT DATEDIFF(day, pubdate, getdate()) AS no_of_daysFROM titlesGO
DATEDIFF函數在Access和MSSQL中的使用區別
ACCESS中用法:DATEDIFF('day', pubdate, Now())
MSSQL中用法:DATEDIFF(day, pubdate, getdate())
Ⅳ sql 中 日期和字元比較的問題
'1991-7-1'是日期格式字元串,sql server會把它當作日期,當然可以比較,其實是在比較日期。
Ⅵ sql 日期比較查詢
用or,這里用and的話,意思是要查的日期即要比12.11大,又要比10.20小,就像是要找一個即要比5大又要比3小的數,這樣的數是不存在 的
Ⅶ 知識積累之怎樣在SQL語句中比較兩個字元串類型時間
1、合理的做法是先轉換成日期類型,再比較;
2、但有時也可以利用字元串進行比較,如
SELECT Count(*)
FROM Orders
WHERE BizDate > '2016-01-01' -- 注意,日期的字元串格式2者要匹配,否則可能得不到正確的結果。
Ⅷ Sql字元串與時間比較問題
oracle比較字元串是根據ascii碼來的,第一個字母的ascii大小比較如果相等再比較下一個,類推。
字元串和數字進行操作是會報異常的,因為類型不一樣不能進行比較。
oracle在執行sql的時候有些時候會自動轉換,比如:
select
*
from
chan_customer
cc
where
cc.customer_id
=
'1';
即使customer_id是數字型的也可以查出來,但是oracle有區分字元和數字
就是通過加不加單引號來區分。