日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql存储过程1267_mysql存储过程一例

發布時間:2025/3/20 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql存储过程1267_mysql存储过程一例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

同事給的一個存儲過程有點問題,測試發現" IF? date_format(sysdate(),'%H:%i:%s') >

From_Time AND date_format(sysdate(),'%H:%i:%s') < End_Time THEN"

這個語句有問題。創建如下存儲過程進行分析:

mysql> delimiter

//

mysql> create

procedure proc_t(in from_time time,in end_time time)

-> begin

->

IF

date_format(sysdate(),'%H:%i:%s') > From_Time AND date_format(sysdat

e(),'%H:%i:%s') <

End_Time THEN

->

select 'a';

->

else

->

select 'b';

->

end if;

-> end //

Query OK, 0 rows

affected (0.00 sec)

mysql> delimiter

;

該存儲過程只是判斷是否滿足條件,執行結果是報錯:

mysql> call

proc_t('23:00:00','23:50:00');

ERROR 1267 (HY000):

Illegal mix of collations (gbk_chinese_ci,COERCIBLE) and (la

tin1_swedish_ci,NUMERIC)

for operation '>'

如果按照1267錯誤去找,可能就偏離答案了。實際執行的存儲過程中有對該報錯的處理,因此結果不符合預期,但也沒有報錯。

由于輸入變量from_time和end_time都是時間類型,而比較時使用date_format(sysdate(),'%H:%i:%s')生成的是字符串,不具有可比性,造成報錯。

通過time函數,將比較運算符兩邊修改為都是時間格式,就不會報錯了:

mysql> create

procedure proc_t(in from_time time,in end_time time)

-> begin

->

IF? time(sysdate()) > From_Time

AND time(sysdate()) < End_Time THEN

->

select 'a';

->

else

->

select 'b';

->

end if;

-> end //

Query OK, 0 rows

affected (0.00 sec)

mysql> delimiter

;

mysql>? call proc_t('23:00:00','23:59:00');

+---+

| a |

+---+

| a |

+---+

1 row in set (0.01

sec)

Query OK, 0 rows

affected (0.01 sec)

總結

以上是生活随笔為你收集整理的mysql存储过程1267_mysql存储过程一例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。