[英]How to MAX() on any column type at SQL Server
我有一個包含許多列和查詢構建器的視圖,最終將在查詢中添加MAX
語句。 問題是,當列類型為BIT時我不能使用MAX
,所以我需要先檢查類型。 我無法在查詢構建器中檢查列的數據類型,因此我需要一個適用於任何數據類型的SQL解決方案。
下面是一個例子(在SELECT
的內CTE
表示VIEW
其可以具有任何類型的數據的mycol
,對於本第一示例我模擬BIT
的。 MAX
部分是我需要工作):
原版的
WITH cte (mycol) AS
(
SELECT CAST(1 as BIT) as mycol
)
SELECT
MAX(mycol) as mycol_max
FROM cte
我收到了這個錯誤:
操作數數據類型位對於max運算符無效。
鑄件
如果我執行以下操作,它將起作用:
WITH cte (mycol) AS
(
SELECT CAST(1 as BIT) as mycol
)
SELECT
MAX(CAST(mycol as INT)) as mycol_max
FROM cte
但是,如果mycol
是一個字符串(SELECT'test'作為mycol),我收到此錯誤:
將varchar值'test'轉換為數據類型int時轉換失敗。
所以,我嘗試使用一些不同的方法檢查類型:
ISNUMERIC()
WITH cte (mycol) AS
(
SELECT 'test' as mycol
)
SELECT
MAX(CASE
WHEN 1 = ISNUMERIC(mycol)
THEN CAST(mycol AS INT)
ELSE mycol
END) AS mycol_max
FROM cte
不喜歡%[^ 0-9]%
WITH cte (mycol) AS
(
SELECT 'test' as mycol
)
SELECT
MAX(CASE
WHEN "mycol" NOT LIKE '%[^0-9]%'
THEN CAST(mycol AS INT)
ELSE mycol
END) AS mycol_max
FROM cte;
TRY_PARSE
WITH cte (mycol) AS
(
SELECT 'test' as mycol
)
SELECT
MAX(CASE
WHEN TRY_PARSE(mycol AS INT) IS NOT NULL
THEN CAST(mycol AS INT)
ELSE mycol
END) AS mycol_max
FROM cte
所有這些都返回了錯誤
將varchar值'test'轉換為數據類型int時轉換失敗。
另外,如果mycol
是一個整數:
WITH cte (mycol) AS
(
SELECT 1 as mycol
)
...
我有
參數數據類型int對於解析函數的參數1無效。
所以,我只需要在MAX()
語句中允許任何內容。 我試過檢查和轉換,但沒有得到任何滿意的解決方案。 我該怎么做?
謝謝
使用SQL Server 2017。
BIT不會表現為int,因此MAX不會真正起作用,除非您只選擇仍然不是最佳的最大LEN。 您可以嘗試ORDER BY DESC,但我懷疑它會有所幫助。 您也可以添加另一個列來指定您正在尋找的MAX。
SELECT TOP 1 CAST(1 as BIT) as mycol
FROM TB1
ORDER BY mycol DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.