我在日期转换方面遇到了一些问题,并且尝试了很多以前的帖子。然而,之前的大多数帖子似乎都涉及将英语日期转换为其他文化,反之亦然。
问题是:
我有一个"字符串"格式的日期,它被传递到一个变量中。我想在不改变语言的情况下把它变成一个约会。我想这样做,这样我就可以查看日期之间的记录。
DECLARE @style INT
DECLARE @recordDate DATE
DECLARE @srchDateBegin NVARCHAR(30)
DECLARE @localeID NVARCHAR(10)
SET @localeID = '1036'
SET @srchDateBegin = '13/04/2022'
SELECT @style = CASE WHEN @localeID = '1036' THEN 103 ELSE 101 END
这是所有的声明内容(结构有点不同,但我用这种方式写出来让它更简单。下面是我尝试转换所有内容的一种方法,但没有成功:
-SQL SELECT STUFF-
AND (@srchDateBegin = ''
OR @recordDate BETWEEN CONVERT(NVARCHAR(30), CAST(@srchDateBegin AS DATE), @style) AND ...
然后我尝试在SQL中使用FORMAT函数,但它不想要NVARCHAR,但因为我不能将"1996年2月16日"的NVARCHAR格式转换为DATE,所以我被卡住了
AND (@srchDateBegin = ''
OR @recordDate BETWEEN
CASE WHEN @style = '103' AND '@srchDateBegin' <> '' THEN FORMAT(@srchDateBegin, 'dd/MM/yyyy') ELSE '@srchDateBegin' END AND ...
试试这个:
DECLARE @srchDateBegin NVARCHAR(30)
SET @srchDateBegin = '13/04/2022'
SELECT CONVERT(DATE, @srchDateBegin, 105)
根据您所写的内容,您实际上是在将某些内容转换为NVARCHAR
,而不是相反。
CONVERT
和CAST
:的语法
-- CONVERT syntax:
CONVERT(data_type(length), expression, style)
-- CAST syntax:
CAST(expression AS data_type(length))
注:只需要data_type
和expression
;CCD_ 6和CCD_。
建议:
-- your code:
CONVERT(NVARCHAR(30), CAST(@srchDateBegin AS DATE), @style)
-- suggestion:
CONVERT(date, @srchDateBegin, @style)
来源:
- W3Schools的快速信息
- 比较Microsoft文档中的
CAST
和CONVERT