sql中迄今为止的字符串

vwhgwdsa  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(289)

有没有一种方法可以快速地将这个日期格式转换成sql中的日期?

{ “date_from”:”22112017”,”date_to”:”22112017”}

这是过滤这些日期之间的数据所必需的
(网上有很多转换条目,但我还没有找到这种格式)
编辑:

DECLARE @EndDate DATE = CONVERT(VARCHAR, '22112017', 103)
PRINT @EndDate
``` `Error: Conversion failed when converting date and/or time from character string.` 我所拥有的:

@StartDate = '22112017'
@EndDate = '22112020'

我需要做的是:

SELECT * from tblMy WHERE ReceivedDate BETWEEN @StartDate AND @EndDate

093gszye

093gszye1#

如果您将json修复为不使用样式化双引号( )使用标准的( " )然后可以将其解析为json。一旦提取了值,就可以注入几个 / 字符,然后转换为 date 样式代码是103( dd/MM/yyyy ):

DECLARE @String nvarchar(MAX) = N'{ "date_from":"22112017","date_to":"22112017"}';

SELECT CONVERT(date,STUFF(STUFF(OJ.date_from,5,0,'/'),3,0,'/'),103) AS date_from,
       CONVERT(date,STUFF(STUFF(OJ.date_to,5,0,'/'),3,0,'/'),103) AS date_to
FROM (VALUES(@String))V(S)
     CROSS APPLY OPENJSON(V.S)
     WITH (date_from varchar(8),
           date_to varchar(8)) OJ;

编辑:
似乎op已经移动了他们的目标位置,这与json无关。
这里的问题是你的文字字符串。当对日期和时间数据类型使用文本字符串时,请使用 yyyyMMdd 或者 yyyy-MM-ddThh:mm:ss.nnnnnnn 因为无论语言和数据类型如何,它们都是明确的:

DECLARE @StartDate date,
        @EndDate date;

SET @StartDate = '20171222';
SET @EndDAte = '20201122';

SELECT *
FROM tblMy
WHERE ReceivedDate BETWEEN @StartDate AND @EndDate;
l7wslrjt

l7wslrjt2#

我建议将该值转换为标准的SQLServer日期值。这很简单:

select convert(date, left(val, 4) + substring(val, 3, 2) + right(val, 2))

标准日期格式为yyyymmdd。您的是ddmmyyyy,因此字符串操作可以将其转换为正确的格式。当然,您可能应该做的是将值转换为应用程序层中的日期,并将日期值作为参数传入。

kuuvgm7e

kuuvgm7e3#

这将修复错误“错误:从字符串转换日期和/或时间时转换失败。”

DECLARE @EndDate VARCHAR(MAX) = '22112017'
DECLARE @datevar date = CAST(SUBSTRING(@EndDate, 3, 2) + '/' + SUBSTRING(@EndDate, 
1, 2) + '/' + SUBSTRING(@EndDate, 5, 4) AS date);  
SELECT @datevar;

相关问题