如何在SQL Select語句上返回布爾值?在SQL選擇語句上返回布爾值
我試過這段代碼:
SELECT CAST(1 AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
且僅當在表中存在UserID
返回TRUE
值。如果表格中不存在UserID
,我希望它返回FALSE
值。非常感謝你。
如何在SQL Select語句上返回布爾值?在SQL選擇語句上返回布爾值
我試過這段代碼:
SELECT CAST(1 AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
且僅當在表中存在UserID
返回TRUE
值。如果表格中不存在UserID
,我希望它返回FALSE
值。非常感謝你。
如果用戶不存在,那麼您在那裏將會返回任何行。這裏有您需要什麼:
SELECT CASE WHEN EXISTS (
SELECT *
FROM [User]
WHERE UserID = 20070022
)
THEN CAST(1 AS BIT)
ELSE CAST(0 AS BIT) END
爲什麼使用星號,最好是用'1'而不是'*'。 – 2015-03-13 06:04:27
@ robertpeter07 - 兩者是等價的,但'*'更具慣用性。看[這個問題](http://stackoverflow.com/q/1597442/1121833)。 – Chad
如果在WHILE循環上使用,我必須在「WHILE」之後緊跟在括號{}之後嗎? –
可能沿着這些路線的東西:
SELECT CAST(CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS BIT)
FROM dummy WHERE id = 1;
這將返回一個字符串,而不是布爾型 –
sqlfiddle爲空 – SpringLearner
這是一個很好的做法,包括列名 - SELECT CAST(CASE當COUNT(*)> 0 THEN 1 ELSE 0 END AS BIT)作爲mycolumnname FROM dummy WHERE id = 1 –
鑑於普遍1 = true
和0 = false
,所有你需要做的是計算行數,並投到boolean
。
因此,您發佈的代碼只需要一個COUNT()
功能補充說:
SELECT CAST(COUNT(1) AS BIT) AS Expr1
FROM [User]
WHERE (UserID = 20070022)
做'存在'('測試要比對大量行進行'Count(1)'測試要快得多 –
也許我在答案中沒有聲明性能,只是最小的代碼更改實現OP想要的東西,但是,如果列'UserID'被索引(或者甚至是PK),你肯定會直接找到存在(或不存在)的唯一行。 – Stewart
select CAST(COUNT(*) AS BIT) FROM [User] WHERE (UserID = 20070022)
如果count(*)= 0返回false。如果count(*)> 0返回true。
我不喜歡這樣寫道:
SELECT 1 FROM [dbo].[User] WHERE UserID = 20070022
看到作爲一個布爾不能爲空(在.NET中至少),它應該默認爲false,也可以將其設置爲自己,如果它的默認真。但是1 = true,所以null = false,並且沒有額外的語法。
注意:我使用Dapper作爲我的微型ORM,我想ADO應該工作一樣。
哪個dbms? sql的細節不同。 – joshp
SQL Server不支持布爾類型例如'選擇何時CAST(1 AS BIT)然後'YES'END AS result' - 會導致錯誤,即CAST(1 AS BIT)'不是相同的邏輯TRUE。 – onedaywhen