在字符串中选择一个日期并将其转换为日期时间



我有一个字符串,比如:

"间谍我们03/20/20 P45">

我只想从字符串中选择日期。

我当前的查询是:

Select Ticker, SUBSTRING(Ticker, PATINDEX('%[0-9][0-9]/[0-9][0-9]/[0-9][0-9]%',o.Ticker),8) AS 'myDate' FROM TABLE

返回:"SPY US 03/20/20 P45",03/20/20

我希望我的Date在datetime中。

我尝试过各种形式的强制转换和转换,但都失败了,大概是因为他们希望格式是YYYY-MM-DD,而不是MM/DD/YY。

我"最聪明"的转换尝试是:

CONVERT(DATETIME, SUBSTRING(o.Ticker, PATINDEX('%[0-9][0-9]/[0-9][0-9]/[0-9][0-9]%',o.Ticker),8),1)

阅读此处的风格指南后:https://www.w3schools.com/sql/func_sqlserver_convert.asp但它还是失败了。

理想的日期结束格式是YYYY-MM-DD

编辑后添加:

我一直在摆弄它,意识到我的问题过于简单化了。如果我只是在一个字符串上测试它,那么转换就可以工作,但整个查询涉及多个联接。

据我所知,您正在寻找这样的东西。

您可以使用string_split()函数拆分带有空格的字符串,然后使用try_cast()函数检查每个值是否为date

declare @string as varchar(120) = 'SPY US 03/20/20 P4'
; with cte as (select 
value
from string_split (@string, ' ')
)Select value from cte where try_cast (value as datetime) is not null

Live数据库<>小提琴演示。

因此,该列中有一些条目没有友好的日期格式,因此patidix子句返回了无意义的内容。

由于某种原因,导致整个操作失败(而不仅仅是在少数失败的条目上返回null(。

一旦我将整个(最终更复杂的联接语句(选择到一个临时表中,我就可以尝试将子字符串转换为日期并运行我的操作。

相关内容

  • 没有找到相关文章

最新更新