簡體   English   中英

我可以在案例陳述中使用列名作為參數

[英]Can I use column name as a parameter in case statement

我想將列名的值用作case語句中的參數。

我擁有的列名稱是數字,我想對列名稱進行一些計算,並根據結果返回[value]或[null]。

我這樣做是在SQL Server上進行的。

因此,例如,假設2013是該列的名稱,並且year([some date])= 2016,則[New Column]應該等於0。

SELECT CASE WHEN [2013] < year([some date]) then 0 else [2013] END AS [New Column]

是的,這是可能的: 有關case語句的T-SQL文檔

不過,將您的列名稱命名為數字看起來有點臟,我建議您不要這樣做。 那實際上可能是您的問題。 看到這個答案

根據對問題的評論,您正在尋找類似的東西( 偽代碼-無法使用! ):

SELECT CASE WHEN CAST(NAME_OF([2013]) AS INT) < year([some date]) THEN 0 ELSE [2013] END AS [New Column]
FROM [TableName]

偽函數 NAME_OF返回對象的名稱。
但是,SQL Server不包含這樣的函數(它確實具有object_name ,但是它接受了一個表示對象ID的int,要獲取對象ID,您需要知道對象的名稱,因此並沒有太大幫助。 ,無論如何,表格列都沒有對象ID,它們的ID是其包含的表格ID和其列ID的組合。

您可以執行以下操作:

SELECT CASE WHEN 2013 < year([some date]) THEN 0 ELSE [2013] END AS [New Column]
FROM [TableName]

[some date]在2013之前時,它將返回0,否則將返回存儲在名為2013的列中的值。

繼續Zohar Peled的綜述,我想到了一種方法。 特別是因為您還選擇了標簽tsql ...

declare @colname nvarchar(4) = '2013'
declare @statement nvarchar(4000) = N'SELECT CASE WHEN ' + @colname + N' < year([some date]) then 0 else [' + @colname + N'] END AS [New Column]'
exec sp_executesql @statement

不過,我不得不承認,我也不明白(無論是)您想做什么。...這樣,您無論如何都要對列名進行硬編碼,這引發了一個問題,為什么您從一開始就沒有這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM