1. 程式人生 > >有關mysql中CASE的sql語句用法

有關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