Dan*_*nar 0 sql-server datetime
我在 MS SQL 中将字符串转换为日期有点困难。希望你能指导我。
这是我的场景:
我的表中有一个名为 ExpDt 的列。它是产品的保质期。格式为 mm/dd。
现在我想知道什么产品会在 5 天前过期。所以我要做一个datediff。但问题是 ExpDt 列不是有效日期。如何将其转换为有效日期?
因此输出将类似于:2018-01-20,这是一个有效日期。不是字符串。
这是我尝试过的。
-- Outputs 2018-01-31
-- select @expDate = cast(datepart(year, getdate()) as nvarchar(5))
-- + '-' + substring(ExpDt, 1, 2)
-- + '-' + substring(ExpDt, 4, 5)
-- from BigEMerchandiser.dbo.tbl_Abis_D
Run Code Online (Sandbox Code Playgroud)
它返回一个字符串,但我无法使用 convert 函数将其转换为日期。我将附上表格的屏幕截图,以便您可以看到 ExpDt 列的数据。希望我清楚地解释了自己。任何帮助将非常感激。谢谢你。
您能做的最好的事情是修复您的表格,以便您存储日期而不是字符串。话虽如此,您在问题中发布的代码走在正确的轨道上。问题是您将其保留为字符串,而没有将其显式转换为DATETIME
. 根据数据类型优先规则,您过滤的数据也会转换为您不想要的字符串。
如果您想保留该SUBSTRING
方法,则可以尝试以下操作:
CREATE TABLE #T (NOT_A_DATE NVARCHAR(5));
INSERT INTO #T VALUES (N'01/30'), (N'01/31');
SELECT
DATEFROMPARTS(
datepart(year, getdate())
, substring(NOT_A_DATE, 1, 2)
, substring(NOT_A_DATE, 4, 5)
)
FROM #t;
Run Code Online (Sandbox Code Playgroud)
关键是使用DATEFROMPARTS函数将字符串转换为在所有语言环境中都是安全的日期。
归档时间: |
|
查看次数: |
164 次 |
最近记录: |