เลือก *,if(sva=1,"male","Female") เป็น ssva จาก Taname โดยที่ sva<>""
12.2
ค่า CASE WHEN [เปรียบเทียบค่า] THEN ผลลัพธ์ [เมื่อ [เปรียบเทียบมูลค่า] THEN ผลลัพธ์ ...] [ผลลัพธ์ ELSE] END CASE WHEN [เงื่อนไข] THEN ผลลัพธ์ [เมื่อ [เงื่อนไข] THEN ผลลัพธ์ ...] [ผลลัพธ์ ELSE] จบ
ในผลลัพธ์ที่ส่งคืนของสถานการณ์แรก ให้ value=compare-value ผลลัพธ์ที่ส่งคืนของสถานการณ์สมมติที่สองคือผลลัพธ์ที่แท้จริงของสถานการณ์สมมติแรก หากไม่มีค่าผลลัพธ์ที่ตรงกัน ผลลัพธ์ที่ส่งคืนจะเป็นผลลัพธ์หลัง ELSE หากไม่มีส่วน ELSE ค่าที่ส่งคืนจะเป็น NULL
mysql> เลือกกรณี 1 เมื่อ 1 แล้ว 'หนึ่ง'
-> เมื่อ 2 แล้ว 'สอง' อื่น ๆ 'มากกว่า' สิ้นสุด;
-> 'หนึ่ง'
mysql> เลือกกรณีเมื่อ 1> 0 แล้ว 'จริง' มิฉะนั้น 'เท็จ' สิ้นสุด
-> 'true'
mysql> SELECT CASE BINARY 'B'
-> WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;
-> NULL
ประเภทค่าตอบแทนเริ่มต้นของนิพจน์ CASE คือประเภทคอลเลกชันที่เข้ากันได้ของค่าที่ส่งคืน แต่ สถานการณ์เฉพาะขึ้นอยู่กับบริบท หากใช้ในบริบทสตริง จะส่งกลับสตริงผลลัพธ์ หากใช้ในบริบทที่เป็นตัวเลข ผลลัพธ์จะถูกส่งกลับเป็นค่าทศนิยม ค่าจริง หรือจำนวนเต็ม
ถ้า(expr1,expr2,expr3)
ถ้า expr1 เป็น TRUE (expr1 <> 0 และ expr1 <> NULL) ค่าที่ส่งคืนของ IF() จะเป็น expr2 มิฉะนั้น ค่าที่ส่งคืนจะเป็น expr3 ค่าที่ส่งกลับของ IF() อาจเป็นค่าตัวเลขหรือค่าสตริง ขึ้นอยู่กับบริบท
mysql> เลือก IF(1>2,2,3);
-> 3
mysql> เลือก IF(1<2,'yes ','no');
-> 'yes'
mysql> SELECT IF(STRCMP('test' ,'test1'),'no','yes');
-> 'no'
ถ้ามี expr2 หรือ expr3 เพียงอันเดียวเท่านั้นที่เป็น NULL ประเภทผลลัพธ์ของฟังก์ชัน IF() จะเป็นประเภทผลลัพธ์ของนิพจน์ที่ไม่ใช่ NULL .
expr1 ประเมินเป็นค่าจำนวนเต็ม ซึ่งหมายความว่า หากคุณกำลังตรวจสอบค่าจุดทศนิยมหรือค่าสตริง คุณควรใช้การดำเนินการเปรียบเทียบเพื่อตรวจสอบ
mysql> SELECT IF(0.1,1,0);
-> 0
mysql> SELECT IF(0.1<>0,1,0);
-> 1
ในตัวอย่างแรกที่แสดง ค่าที่ส่งคืนของ IF(0.1) คือ 0 เพราะ 0.1 ถูกแปลงเป็นค่าจำนวนเต็ม ทำให้เกิดการทดสอบ IF(0) นี่อาจไม่ใช่สถานการณ์ที่คุณต้องการ ในตัวอย่างที่สอง การเปรียบเทียบจะตรวจสอบค่าจุดลอยตัวเดิมเพื่อดูว่าค่านั้นไม่เป็นศูนย์หรือไม่ ใช้จำนวนเต็มสำหรับผลการเปรียบเทียบ
ประเภทการส่งคืนเริ่มต้นของ IF() (ซึ่งเป็นสิ่งสำคัญเมื่อเก็บไว้ในตารางชั่วคราว) จะถูกคำนวณดังนี้:
นิพจน์
ส่งกลับค่า
ค่าที่ส่งกลับของ expr2 หรือ expr3 เป็นสตริง
เชือก
ค่าที่ส่งกลับของ expr2 หรือ expr3 เป็นค่าทศนิยม
จุดลอยตัว
ค่าที่ส่งกลับของ expr2 หรือ expr3 เป็นจำนวนเต็ม
จำนวนเต็ม
ถ้า expr2 และ expr3 เป็นสตริงทั้งสอง และสตริงใดสตริงหนึ่งคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ผลลัพธ์ที่ส่งคืนจะคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
http://blog.knowsky.com/
IFNULL(expr1,expr2)
ถ้า expr1 ไม่ใช่ NULL ค่าที่ส่งคืนของ IFNULL() จะเป็น expr1 มิฉะนั้น ค่าที่ส่งคืนจะเป็น expr2 ค่าที่ส่งกลับของ IFNULL() อาจเป็นตัวเลขหรือสตริง ขึ้นอยู่กับบริบทที่ใช้
mysql> เลือก IFNULL (1,0);
->
1
mysql
>
เลือก IFNULL (1/0
, 'yes');
-> 'yes'
ค่าผลลัพธ์เริ่มต้นของ IFNULL(expr1,expr2) คือหนึ่งในสองนิพจน์ที่ "ทั่วไป" มากกว่า ตามลำดับของ STRING, REAL หรือ INTEGER สมมติว่าเป็นกรณีของตารางที่ใช้นิพจน์ หรือ MySQL ต้องเก็บค่าที่ส่งคืนของ IFNULL() ไว้ในตารางชั่วคราวในหน่วยความจำ:
CREATE TABLE tmp SELECT IFNULL(1,'test') AS test
ในตัวอย่างนี้ ให้ทดสอบคอลัมน์ ประเภทคือ CHAR(4)
NULLIF(expr1,expr2)
ถ้า expr1 = expr2 ค้าง ค่าที่ส่งคืนจะเป็น NULL มิฉะนั้นค่าที่ส่งคืนจะเป็น expr1 นี่เป็นเช่นเดียวกับ CASE เมื่อ expr1 = expr2 แล้ว NULL อื่น expr1 END
mysql> SELECT NULLIF(1,1);
-> NULL
mysql> SELECT NULLIF(1,2);
-> 1
โปรดทราบว่าหากพารามิเตอร์ไม่เท่ากัน ค่าที่ได้รับจาก MySQL สองครั้งจะเป็น expr1