sql-server - 动态sql公式字符串列转换为日期

标签 sql-server sql-server-2008 t-sql dynamic-sql

以下代码由临时表 #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/

相关文章:

sql-server - TSQL插入一组行和相关行

sql-server - CSV 中的 T-SQL OpenRowSet 缺少标题行

sql - 如何在 SQL Server 中的表类型上创建过滤索引?

SQL 错误的百分比计算

sql-server - 有没有一种快速的方法可以将列中的所有值转换为 True/False 值?

javascript - 从sql server获取日期时间字段

sql - 在 where 子句中使用排名函数派生列 (SQL Server 2008)

sql - 错误: Could not create constraint SQL Server 2008

database - 无法连接到 "local"(SQL Server 2008)

java - SQL 异常 com.microsoft.sqlserver.jdbc.sqlserverexception : login failed for user '' . Clientconnectionid:073b35b2-0e56-460d-8353-9de2b2d0ecff