有關mysql中CASE的sql語句用法
1.在mysql資料庫中,有關case when語句的用法,介紹了case when語句的基礎知識,並提供了相關例項,供大家學習參考,有需要的朋友不要錯過
mysql資料庫中CASE WHEN語句。
case when語句,用於計算條件列表並返回多個可能結果表示式之一。
CASE 具有兩種格式:
簡單 CASE 函式將某個表示式與一組簡單表示式進行比較以確定結果。
CASE 搜尋函式計算一組布林表示式以確定結果。
兩種格式都支援可選的 ELSE 引數。
語法
簡單 CASE 函式:
CASE input_expression
WHEN when_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
END
CASE 搜尋函式:
CASE
WHEN Boolean_expression THEN result_expression
[ ...n ]
[
ELSE else_result_expression
END
引數
input_expression
是使用簡單 CASE 格式時所計算的表示式。Input_expression 是任何有效的 Microsoft? SQL Server? 表示式。
WHEN when_expression
使用簡單 CASE 格式時 input_expression 所比較的簡單表示式。When_expression 是任意有效的 SQL Server 表示式。Input_expression 和每個 when_expression 的資料型別必須相同,或者是隱性轉換。
佔位符,表明可以使用多個 WHEN when_expression THEN result_expression 子句或 WHEN Boolean_expression THEN result_expression 子句。
THEN result_expression
當 input_expression = when_expression 取值為 TRUE,或者 Boolean_expression 取值為 TRUE 時返回的表示式。
result expression 是任意有效的 SQL Server 表示式。
ELSE else_result_expression
當比較運算取值不為 TRUE 時返回的表示式。如果省略此引數並且比較運算取值不為 TRUE,CASE 將返回 NULL 值。Else_result_expression 是任意有效的 SQL Server 表示式。Else_result_expression 和所有 result_expression 的資料型別必須相同,或者必須是隱性轉換。
WHEN Boolean_expression
使用 CASE 搜尋格式時所計算的布林表示式。Boolean_expression 是任意有效的布林表示式。
結果型別
從 result_expressions 和可選 else_result_expression 的型別集合中返回最高的優先規則型別。有關更多資訊,請參見資料型別的優先順序。
結果值
簡單 CASE 函式:
計算 input_expression,然後按指定順序對每個 WHEN 子句的 input_expression = when_expression 進行計算。
返回第一個取值為 TRUE 的 (input_expression = when_expression) 的 result_expression。
如果沒有取值為 TRUE 的 input_expression = when_expression,則當指定 ELSE 子句時 SQL Server 將返回 else_result_expression;若沒有指定 ELSE 子句,則返回 NULL 值。
CASE 搜尋函式:
按指定順序為每個 WHEN 子句的 Boolean_expression 求值。
返回第一個取值為 TRUE 的 Boolean_expression 的 result_expression。
如果沒有取值為 TRUE 的 Boolean_expression,則當指定 ELSE 子句時 SQL Server 將返回 else_result_expression;若沒有指定 ELSE 子句,則返回 NULL 值。
下面分享一些mysql case when語句的例子。
A. 使用帶有簡單 CASE 函式的 SELECT 語句
在 SELECT 語句中,簡單 CASE 函式僅檢查是否相等,而不進行其它比較。
例子,使用 CASE 函式更改圖書分類顯示。
CREATE TABLE `tsou_clock_info` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`staffid` int(11) DEFAULT NULL,
`week` varchar(10) DEFAULT NULL,
`firsttime` datetime DEFAULT NULL,
`lasttime` datetime DEFAULT NULL,
`enterlate` int(11) DEFAULT '1',
`leaveearly` int(11) DEFAULT '1',
`opertime` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=30419 DEFAULT CHARSET=utf8;
CREATE TABLE `tsou_staff_info` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '系統編號,自增唯一主鍵',
`phone` varchar(11) DEFAULT NULL COMMENT '手機號碼',
`tel` varchar(12) DEFAULT NULL COMMENT '固定電話',
`password` varchar(20) DEFAULT NULL,
`logo` varchar(200) DEFAULT NULL,
`realname` varchar(20) DEFAULT NULL COMMENT '真實姓名',
`depart` int(5) DEFAULT NULL COMMENT '部門編號',
`title` varchar(20) DEFAULT NULL COMMENT '職稱',
`type` varchar(20) DEFAULT NULL COMMENT '手機型別,安卓,蘋果,wp',
`onlytag` varchar(200) DEFAULT NULL COMMENT '手機標識,imei/token',
`openid` varchar(100) DEFAULT NULL,
`worknum` varchar(20) DEFAULT NULL COMMENT '工號,ZB00000000',
`workcode` varchar(20) DEFAULT NULL COMMENT '工牌二維碼',
`regtime` datetime DEFAULT NULL COMMENT '新增時間',
`manage` int(11) DEFAULT '0',
`is_del` int(1) DEFAULT '0' COMMENT '刪除狀態',
`auditflag` int(1) DEFAULT '0' COMMENT '0 未稽核 1 已稽核',
`sex` int(1) DEFAULT '0' COMMENT '0:男 1:女',
PRIMARY KEY (`id`),
UNIQUE KEY `staffphoneonly` (`phone`) USING BTREE,
UNIQUE KEY `staffworknumonly` (`worknum`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=126 DEFAULT CHARSET=utf8 COMMENT='員工主要資訊';
1.判斷firstTime和lastTime是否是同一天的判斷
select a.*,b.realname,
CASE
WHEN substring(a.firsttime, 1,11) = substring(a.lasttime,1,11) THEN '正常'
else '上下班時間不一致'
END TEMP
from tsou_clock_info a left join tsou_staff_info b on (a.staffid=b.id)
where 1=1 and opertime like '2014-11%' order by b.realname