sql-server - 在 T-SQL 中添加计算字段以将字符串值转换为日期
问题描述
我正在尝试将计算字段添加到 SSMS 中的现有表中,这会将格式YYYYMMDD
中的字符串转换为日期格式,但我收到有关字符串字段无效的错误。
我需要计算字段,因为我在字符串字段中有“00000000”值(即 NULL),因此不能在日期计算中使用它。
我正在使用的代码是:
ALTER TABLE [TEM].[AssignmentRates]
ADD [Date_Expired] DATE NULL
(SELECT CONVERT([date], CASE WHEN [Expiry_Date]='00000000' THEN NULL ELSE [Expiry_Date] END))
[Expiry_Date]
我要转换的字符串列在哪里,是[Date_Expired]
我要添加的计算列的名称。
我收到此错误:
列名“Expiry_Date”无效
针对该字段名称的两个实例,并且无法找出原因。如果我单独运行查询,SELECT
它会返回所需的结果。
使用表别名或完整的数据库、表名和列名似乎也不起作用。
这可能是非常明显的事情,但我无法弄清楚它是什么。
解决方案
上的错误expiry_date
似乎很清楚——那不是表中列的名称。但是您可以简化逻辑:
ALTER TABLE TEM.AssignmentRates ADD Date_Expired AS
(TRY_CONVERT(date, Expiry_Date));
实际上,嵌套SELECT
可能导致了问题。这通常不会用于计算列。
推荐阅读
- c# - SessionTimeOut 属性中的会话变量始终为空
- javascript - 函数提升显示有和没有块范围的不同结果
- php - 如何请求具有多个数组的 php soap 客户端?
- r - 背靠背使用多个实例时,mclapply 挂起
- nativescript - how do I use SFAuthenticationSession from nativescript?
- visual-studio - 如何以编程方式将现有项目添加到 Visual Studio 中的解决方案文件夹
- php - 使用 curl API 时谷歌驱动器上的无标题文件问题
- java - 如何在最新的安卓手机上运行后台工作,如闹钟
- perforce - Perforce:无法使用描述创建新的更改列表
- javascript - 如何使用 javascript 替换以前的 URL 参数?