Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2012 从日期的各个部分格式化日期_Sql Server 2012 - Fatal编程技术网

Sql server 2012 从日期的各个部分格式化日期

Sql server 2012 从日期的各个部分格式化日期,sql-server-2012,Sql Server 2012,我会尽量说得具体一些。我有一个导出查询,现在返回的日期字段类似于YYYY-MM-DD,即使它们是空白日期-- 这将使我更接近我的结果 这里有一个例子 2008-15 我不完全确定为什么子字符串部分不工作。如果我将子字符串更改为其他类似的内容 IsNull(SUBSTRING(Surg_Disch_Dt_Year,1,4)+'-'+RIGHT(Surg_Disch_Dt_Month,2)+'-'+LEFT(Surg_Disch_Dt_Day,2),'')+@Delimit+ 它将我的格式完全更改

我会尽量说得具体一些。我有一个导出查询,现在返回的日期字段类似于
YYYY-MM-DD
,即使它们是空白日期--

这将使我更接近我的结果

这里有一个例子

2008-15

我不完全确定为什么子字符串部分不工作。如果我将子字符串更改为其他类似的内容

IsNull(SUBSTRING(Surg_Disch_Dt_Year,1,4)+'-'+RIGHT(Surg_Disch_Dt_Month,2)+'-'+LEFT(Surg_Disch_Dt_Day,2),'')+@Delimit+
它将我的格式完全更改为mm/dd/yyyy


我做错了什么?

您用SQL-Server-2012标记了它,这意味着您可以使用一些方便的功能,如
TRY\u CONVERT
FORMAT

使用
REPLACE(STR(SomeValue,X),'','0'
的技巧将导致长度为“X”的零填充数字。超过此大小的数字将导致“****”。这部分是串联的。结果是一个8位数字字符串。如果有一个
NULL
,整个字符串将是
NULL

在任何情况下,您都可以将字符串类型的结果传递到
TRY\u CONVERT
。这将尝试转换为
日期
。如果有效,则返回有效日期,如果无效,则返回
NULL
。对于转换失败的所有情况,最终的
ISNULL
将返回空白而不是
NULL

DECLARE @tbl TABLE(Comment VARCHAR(100),Rad_Start_Date_Year INT,Rad_Start_Date_Month INT,Rad_Start_Date_Day INT);
INSERT INTO @tbl VALUES
 ('valid date',2016,7,5)
,('one missing',2016,NULL,5)
,('all missing',NULL,NULL,NULL)
,('invalid',2016,13,5);

SELECT ISNULL(FORMAT(TRY_CONVERT(DATE,REPLACE(STR(Rad_Start_Date_Year,4),' ','0')+REPLACE(STR(Rad_Start_Date_Month,2),' ','0')+REPLACE(STR(Rad_Start_Date_Day,2),' ','0')),'yyyy-MM-dd'),'')
FROM @tbl AS tbl
更新:您可以为此创建一个函数: 结果是:

+-------------+------+------+------+------------+
| valid date  | 2016 | 7    | 5    | 2016-07-05 |
+-------------+------+------+------+------------+
| one missing | 2016 | NULL | 5    |            |
+-------------+------+------+------+------------+
| all missing | NULL | NULL | NULL |            |
+-------------+------+------+------+------------+
| invalid     | 2016 | 13   | 5    |            |
+-------------+------+------+------+------------+

case当rad\u starT\u date为null时,则“”否则….生成yyyy mm dd stuff end case
似乎不起作用。我收到错误无效的列名和不正确的语法。对于下一个问题,请尝试将代码简化为实际问题…您好@user251641,我刚刚更新了我的答案…我对原始问题做了一些更改。我是o尝试了类似的东西,所以它会在我这方面得到所有的空白…@user251641,对不起,我不明白你的意思:你是否尝试了
try\u CONVERT
FORMAT
?我在你的问题中看到的唯一变化是,你减少了一些行。如果你创建了我在
更新部分中使用的函数,你可以一个容易传入的三个参数(y、m和d)你会得到合适的日期,如字符串或空白。根据你的需要…那么:什么是wron?缺少什么?这次我更新了一点。在做了几个小时后,我的大脑刚刚完成。你建议的问题是,我有15个表,我需要对所有不同名称的表执行此操作。当我尝试根据你的建议,它没有抓取所有数据。它只是抓取随机值,所以我得到的不是我的122265个条目,而是几千个。这确实有效。我只是使用SELECT ISNULL(格式(TRY_CONVERT(DATE,REPLACE)(STR(Rad_Start_DATE_Year,4),“”,'0')+REPLACE(STR(Rad_Start_DATE_Month,2),“”,'0')+REPLACE(STR(Rad_Start_Date_Day,2),“0”),“yyyy-MM-dd”),”当我做了一些测试,发现Excel很愚蠢,并且在导出后更改了日期。如果我将其发送到.txt文件,效果会很好。谢谢你的帮助。逻辑是有道理的,但结果没有。Hi@User251641,重点是:你必须先连接日期,然后使用
尝试将其转换为
日期。如果连接的字符串是有效日期,则转换将起作用,否则它将返回
NULL
。顺便说一句:我已经将您推过了15个代表点的边界。您现在可以对捐款进行投票,并且您经常被要求使用此权限:-)Thx!
CREATE FUNCTION dbo.MyDATEFROMPARTS(@y NVARCHAR(4),@m nvarchar(2),@d nvarchar(2))
RETURNS NVARCHAR(10)
BEGIN
    RETURN ISNULL(FORMAT(TRY_CONVERT(DATE,REPLACE(STR(@y,4),' ','0')+REPLACE(STR(@m,2),' ','0')+REPLACE(STR(@d,2),' ','0')),'yyyy-MM-dd'),'')
END
GO

DECLARE @tbl TABLE(Comment VARCHAR(100),Rad_Start_Date_Year INT,Rad_Start_Date_Month INT,Rad_Start_Date_Day INT);
INSERT INTO @tbl VALUES
 ('valid date',2016,7,5)
,('one missing',2016,NULL,5)
,('all missing',NULL,NULL,NULL)
,('invalid',2016,13,5);

SELECT tbl.Comment
      ,tbl.Rad_Start_Date_Year AS y
      ,tbl.Rad_Start_Date_Month AS m
      ,tbl.Rad_Start_Date_Day AS d  
      ,dbo.MyDATEFROMPARTS(tbl.Rad_Start_Date_Year,tbl.Rad_Start_Date_Month,tbl.Rad_Start_Date_Day) AS SureDate
FROM @tbl AS tbl
+-------------+------+------+------+------------+
| valid date  | 2016 | 7    | 5    | 2016-07-05 |
+-------------+------+------+------+------------+
| one missing | 2016 | NULL | 5    |            |
+-------------+------+------+------+------------+
| all missing | NULL | NULL | NULL |            |
+-------------+------+------+------+------------+
| invalid     | 2016 | 13   | 5    |            |
+-------------+------+------+------+------------+