我有一个字符串,比如:
"间谍我们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(。
一旦我将整个(最终更复杂的联接语句(选择到一个临时表中,我就可以尝试将子字符串转换为日期并运行我的操作。