Vla*_*lad 3 sql t-sql sql-server sql-server-2008
我有这个相当复杂的查询:
SELECT distinct
v.KodQ, v.DodPeriodika,
v.GodGP, v.Periodika as Period,
k.Oblast, k.KratokNazivSI,
k.NazivSI, k.Periodika,
v.rKod, r.Naziv,
v.rDatum,
v.IT, v.Primerok, v.BrojIE,
CONVERT(varchar, CONVERT(DATETIME, v.RefPeriodOd), 103) as RefPeriodOd,
CONVERT(varchar, CONVERT(DATETIME, v.RefPeriodDo), 103) as RefPeriodDo
FROM GP.dbo.MyTable1 AS v
INNER JOIN GP.dbo.MyTable2 as k
ON k.KodSI = v.KodQ AND k.DodObr = v.DodPeriodika
INNER JOIN GP.dbo.MyTable3 AS r
ON r.rKod = v.rKod
WHERE v.GodGP = GodGP and CHARINDEX('-', RefPeriodDo, 0) != 0
Run Code Online (Sandbox Code Playgroud)
我需要转换v.RefPeriodOd和v.RefPeriodDo从这种格式'31 -癸2017'年以这种格式'31/12/2017'年.
是的我知道将DateTime保存为字符串(varchar)是个坏主意,但是应用程序现在正在使用中,所以我现在无法真正做QA并重构我的表.
我正在使用这个声明:
CONVERT(varchar, CONVERT(DATETIME, v.RefPeriodDo), 103) as RefPeriodDo
Run Code Online (Sandbox Code Playgroud)
但问题是,v.RefPeriodOd和v.RefPeriodDo可以有一个NULL值,也值的格式为:'31 /二千零十七分之十二'
如果我删除这个条件:
CHARINDEX('-', RefPeriodDo, 0) != 0
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
将nvarchar数据类型转换为日期时间数据类型会导致超出范围的值.
如何在查询中添加一些条件?
IF声明是否存在TSQL?
更改
CONVERT(varchar, CONVERT(DATETIME, v.RefPeriodOd), 103) as RefPeriodOd
Run Code Online (Sandbox Code Playgroud)
对于
CASE
WHEN CHARINDEX('-', RefPeriodDo, 0) != 0
THEN CONVERT(varchar, CONVERT(DATETIME, v.RefPeriodOd), 103)
END as RefPeriodOd
Run Code Online (Sandbox Code Playgroud)
并删除中的过滤器WHERE.
CASE如果在内部SELECT语句中,"IF"用子句表示,最常见的语法如下:
CASE
WHEN 1stCondition THEN 1stValue
WHEN 2ndCondition THEN 2ndValue
ELSE DefaultValue -- Else is optional
END
Run Code Online (Sandbox Code Playgroud)
条件按顺序评估,如果没有ELSE发布,则NULL返回.
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |