将 French/France 日期格式的 VARCHAR 转换为日期

Convert VARCHAR in French/France Date format to Date

我在日期转换方面遇到了一些问题,并尝试了很多以前的帖子。但是,之前的大多数帖子似乎都解决了将英语日期转换为其他文化的问题,反之亦然。

这是问题所在:

我有一个 'String' 格式的日期,该日期已传递到变量中。我想在不更改语言的情况下将其转换为日期。我想这样做,以便我可以查看日期之间的记录。

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,但因为我无法将“16/02/1996”的 NVARCHAR 格式转换为 DATE,所以我卡住了

AND (@srchDateBegin = ''
OR @recordDate BETWEEN
   CASE WHEN @style = '103' AND '@srchDateBegin' <> '' THEN FORMAT(@srchDateBegin, 'dd/MM/yyyy') ELSE '@srchDateBegin' END AND ...

根据您所写的内容,您实际上是在将某些内容转换为 NVARCHAR,而不是相反。

CONVERTCAST 的语法

-- CONVERT syntax:
CONVERT(data_type(length), expression, style)

-- CAST syntax:
CAST(expression AS data_type(length))

注意:只需要data_typeexpressionlengthstyle 是可选的。

建议:

-- your code:
CONVERT(NVARCHAR(30), CAST(@srchDateBegin AS DATE), @style)

-- suggestion:
CONVERT(date, @srchDateBegin, @style)

来源:

试试这个:

DECLARE @srchDateBegin NVARCHAR(30)
SET @srchDateBegin = '13/04/2022'

SELECT CONVERT(DATE, @srchDateBegin, 105)