มีตัวดำเนินการตามเงื่อนไขใน T-SQL หรือไม่?


112

ทางเลือกอื่นในการใช้แบบสอบถามต่อไปนี้มีอะไรบ้าง:

select *  
from table  
where isExternal = @type = 2 ? 1 : 0

4
แน่นอนคำตอบสำหรับคำถามที่คุณตั้งไว้ในชื่อของคุณคือ - แน่นอน ตัวBETWEENดำเนินการถูกกำหนดให้รับสามอาร์กิวเมนต์ สิ่งที่คุณกำลังมองหาเป็นเงื่อนไขประกอบการ - ซึ่งเกิดขึ้นที่จะเป็นผู้ประกอบการเพียงการกำหนดให้ใช้เวลาสามข้อโต้แย้งที่กำหนดโดยภาษาส่วนใหญ่
Damien_The_Unbeliever

1
@JFA - ไม่ตัวดำเนินการ ternary คือตัวดำเนินการใด ๆ ที่ใช้ตัวถูกดำเนินการสามตัว ในภาษาส่วนใหญ่หากมีตัวดำเนินการตามเงื่อนไขเป็นเรื่องปกติที่จะมีเพียงตัวดำเนินการเดียวนั่นคือ (โดยทั่วไป) เรียกว่าตัวดำเนินการตามเงื่อนไข การเรียกสิ่งต่างๆด้วยชื่อที่ไม่ถูกต้อง (หรือใช้ชื่อทั่วไปเมื่อคุณหมายถึงเฉพาะ) อาจทำให้เกิดความสับสนมากขึ้น สำหรับคำแนะนำเพิ่มเติมโปรดดูวิกิแท็กternary-operator
Damien_The_Unbeliever

@Damien_The_Unbeliever en.wikipedia.org/wiki/Ternary_operation : ดู "THE ternary operator"
Timothy Kanski

@TimothyKanski - คุณคิดว่าเมื่อพิจารณาถึงเนื้อหาและรูปแบบของความคิดเห็นก่อนหน้าของฉัน (เช่นการเน้นเป็นพิเศษไปที่a ) ซึ่งฉันไม่รู้เรื่องนี้หรือไม่?
Damien_The_Unbeliever

6
OP ใช้ชื่อสามัญสำหรับสิ่งของไม่ใช่ชื่อที่ผิดหรือกว้างเกินไป ฉันไม่เห็นด้วยกับข้อสรุปของคุณที่ว่าผู้เชี่ยวชาญ (ซึ่งสร้างไซต์นี้ขึ้นมา) จะสับสนกับสิ่งนี้เมื่อเป็นคำศัพท์ที่ใช้กันทั่วไป
Timothy Kanski

คำตอบ:



165

ใน SQL Server 2012คุณสามารถใช้IIFฟังก์ชัน :

SELECT *
FROM table
WHERE isExternal = IIF(@type = 2, 1, 0)

โปรดทราบ: ใน T-SQL ตัวดำเนินการกำหนด (และการเปรียบเทียบ) เป็นเพียง=(ไม่ใช่==- นั่นคือ C #)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.