以下代码由临时表 #s 组成,其中 Param2
列是字符串类型。
其中包含表达式、空值和值。我的代码正在捕获 param2 列的所有空值和值。然而,它也按原样获取日期字符串。我想动态地将日期字符串替换为日期值。我得到了所有其他值,包括 param2 列中的空值,但我需要填充日期值而不是日期字符串...请在下面找到我的代码...
DROP TABLE #S
CREATE TABLE #S (ID VARCHAR(2),REPORTNAME VARCHAR(2),PARAM2 VARCHAR(300))
INSERT INTO #S(ID,REPORTNAME,PARAM2)
SELECT '02','A',NULL
UNION SELECT '03','B',NULL
UNION SELECT '06','E','ALL'
UNION SELECT '07','F','ALL'
UNION SELECT '08','G','CONVERT(CHAR(10),GETDATE()-1,101)'
UNION SELECT '09','H','CONVERT(CHAR(10),GETDATE()+1,101)'
UNION SELECT '10','I','CONVERT(CHAR(10),GETDATE()+10,101)'
UNION SELECT '11','J','ALL'
UNION SELECT '12','K',NULL
UNION SELECT '13','l','PRODUCTION'
GO
DECLARE @SQL VARCHAR(MAX)
SELECT @SQL = 'SELECT ID,REPORTNAME, CASE WHEN PARAM2 NOT LIKE ''%CONVERT%'' THEN PARAM2 WHEN PARAM2 IS NULL THEN ' + QUOTENAME('NULL','''') + ' ELSE PARAM2 END AS PARAM2 FROM #S ORDER BY ID' FROM #S
PRINT @SQL
EXEC(@SQL)
所需的输出示例:
ID REPORTNAME PARAM2
08 G 12/08/2014 --(YESTERDAYS DATE)
当前输出示例:
ID REPORTNAME PARAM2
08 G convert(char(10),getdate()-1,101)
最佳答案
这个怎么样?
DECLARE @SQL VARCHAR(MAX)
SELECT @SQL =
'SELECT
ID,
REPORTNAME,
PARAM2 =
CASE
'
SELECT @SQL = @SQL +
' WHEN ID = ' + CONVERT(VARCHAR(10), S.ID) + ' THEN ' + S.PARAM2 + CHAR(10)
FROM(
SELECT
DISTINCT ID, PARAM2
FROM #S
WHERE PARAM2 LIKE '%CONVERT%'
)S
SELECT @SQL = @SQL +
' ELSE ISNULL(PARAM2, ''NULL'')
END
FROM #S
ORDER BY ID'
PRINT @SQL
EXEC(@SQL)
关于sql-server - 动态sql公式字符串列转换为日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27393764/