SQL XML dd/mm/yyyy无法作为字符串返回

SQL XML dd/mm/yyyy无法作为字符串返回,sql,sql-server,Sql,Sql Server,我使用的是一个遗留系统,它只接受XML中数据字段的dd/mm/yyyy,否则会弄乱数据输入 我尝试了各种方法来强制我的数据字段显示为dd/mm/yyyy,我尝试了转换为DATETIME 103,我尝试了将其声明为VARCHAR,每次返回时都是2018-05-11 如何强制返回的字段显示为DD/MM/YYYY,这是我的代码片段,请原谅它有多凌乱不幸的是,它是非常线性的,接受XML的系统是非常基本的 SELECT TOP 1 1 'job/queue', @Branch 'job/br

我使用的是一个遗留系统,它只接受XML中数据字段的dd/mm/yyyy,否则会弄乱数据输入

我尝试了各种方法来强制我的数据字段显示为dd/mm/yyyy,我尝试了转换为DATETIME 103,我尝试了将其声明为VARCHAR,每次返回时都是2018-05-11

如何强制返回的字段显示为DD/MM/YYYY,这是我的代码片段,请原谅它有多凌乱不幸的是,它是非常线性的,接受XML的系统是非常基本的

SELECT TOP 1 1 'job/queue',
       @Branch 'job/branch',
       CASE WHEN myli.PolRef@ IS NOT NULL THEN 'update-broomsrisk' ELSE 'create-broomsrisk' END 'parameters/yzt/char20.1',
       SUBSTRING(@PolicyRef,1,6) 'broomsdata/broomsclient/bcm/refno',
       @PolicyRef 'broomsdata/broomspolicy/bpy/refno',
       CASE WHEN myli.PolRef@ IS NOT NULL THEN myli.key@ ELSE NULL END 'broomsdata/broomspolicy/myli/KEY',
       (SELECT ISNULL(ct2.convictiondate,ct2.offencedate) FROM #ConvictionTable AS ct2 WHERE ct2.RowNo = 1) 'broomsdata/broomspolicy/myli/Date1',
       (SELECT ct2.code FROM #ConvictionTable AS ct2 WHERE ct2.RowNo = 1) 'broomsdata/broomspolicy/myli/Code1',
       (SELECT ct2.fine FROM #ConvictionTable AS ct2 WHERE ct2.RowNo = 1) 'broomsdata/broomspolicy/myli/Fine1',
       (SELECT ct2.noofpoints FROM #ConvictionTable AS ct2 WHERE ct2.RowNo = 1) 'broomsdata/broomspolicy/myli/Points1',
       (SELECT ISNULL(ct2.convictiondate,ct2.offencedate) FROM #ConvictionTable AS ct2 WHERE ct2.RowNo = 2) 'broomsdata/broomspolicy/myli/Date2',
       (SELECT ct2.code FROM #ConvictionTable AS ct2 WHERE ct2.RowNo = 2) 'broomsdata/broomspolicy/myli/Code2',
       (SELECT ct2.fine FROM #ConvictionTable AS ct2 WHERE ct2.RowNo = 2) 'broomsdata/broomspolicy/myli/Fine2',
       (SELECT ct2.noofpoints FROM #ConvictionTable AS ct2 WHERE ct2.RowNo = 2) 'broomsdata/broomspolicy/myli/Points2',
       (SELECT ISNULL(ct2.convictiondate,ct2.offencedate) FROM #ConvictionTable AS ct2 WHERE ct2.RowNo = 3) 'broomsdata/broomspolicy/myli/Date3',
       (SELECT ct2.code FROM #ConvictionTable AS ct2 WHERE ct2.RowNo = 3) 'broomsdata/broomspolicy/myli/Code3',
       (SELECT ct2.fine FROM #ConvictionTable AS ct2 WHERE ct2.RowNo = 3) 'broomsdata/broomspolicy/myli/Fine3',
       (SELECT ct2.noofpoints FROM #ConvictionTable AS ct2 WHERE ct2.RowNo = 3) 'broomsdata/broomspolicy/myli/Points3',
       (SELECT ISNULL(ct2.convictiondate,ct2.offencedate) FROM #ConvictionTable AS ct2 WHERE ct2.RowNo = 4) 'broomsdata/broomspolicy/myli/Date4',
       (SELECT ct2.code FROM #ConvictionTable AS ct2 WHERE ct2.RowNo = 4) 'broomsdata/broomspolicy/myli/Code4',
       (SELECT ct2.fine FROM #ConvictionTable AS ct2 WHERE ct2.RowNo = 4) 'broomsdata/broomspolicy/myli/Fine4',
       (SELECT ct2.noofpoints FROM #ConvictionTable AS ct2 WHERE ct2.RowNo = 4) 'broomsdata/broomspolicy/myli/Points4'
FROM #ConvictionTable AS ct
LEFT OUTER JOIN [FIG-SQL-SRV].InfoCentre.dbo.ic_BD_MYLI AS myli ON ct.branch = myli.B@ AND ct.policyRef = myli.PolRef@
FOR XML PATH('xmlexecute'), TYPE;
我试图强制的字段是'Date1'/'Date2'等字段

干杯

使用
转换(varchar(10),YourDateColumn,103)
。我认为您的错误是试图转换为datetime(我猜您在使用样式代码时尝试了
转换(datetime,YourDateColumn,103)
);SQL Server中的日期/时间数据类型没有格式。试图格式化它们不会起任何作用

例如:
选择CONVERT(varchar(10),GETDATE(),103)
返回
varchar(10)
'11/05/2018'

编辑:下面是(临时)帮助OP展示我如何为OpenInterchange创建XML。OP使用了大量的子选择,这无助于提高查询速度。我已经强调了OP需要注意的几点:

SELECT K.Insco AS Insurer,
       K.B@ AS Branch,
       K.PolRef@ AS PolicyRef,
       K.ClaimRef@ AS ClaimRef,
       --XML Generation starts here.
       (SELECT(SELECT K.B@ AS branch,
               'OO' AS operator,
               'PDF' AS printtype
               FOR XML PATH('job'),TYPE),
              (SELECT (SELECT 'update-claim' AS [Char20.1]
                       FOR XML PATH('yzt'),TYPE)
               FOR XML PATH('parameters'),TYPE),
              (SELECT (SELECT (SELECT K.Ref@ AS Refno
                               FOR XML PATH('bcm'),TYPE)
                       FOR XML PATH('broomsclient'),TYPE),
                       (SELECT (SELECT K.PolRef@ AS Refno
                               FOR XML PATH('bpy'),TYPE)
                       FOR XML PATH('broomspolicy'),TYPE),
                       (SELECT (SELECT K.ClaimRef@ AS [Claim.No],
                                       K.[Claim No] AS [Ins.Claim.Ref],
                                       K.KGMSettled AS [Claim.Settled],
                                       K.KGMReserve AS [Claim.Reserve],
                                       K.KGMReserve + K.KGMSettled As [Claim.Amount],
                                       K.KGMStatus AS [Stat.Desc],
                                       CASE K.KGMStatus WHEN 'Settled' THEN 'SETT'
                                                        WHEN 'Ouststanding' THEN 'OUTS'
                                                        WHEN 'Declined' THEN 'DECL'
                                                        WHEN 'Not Taken up' THEN 'NTUP'
                                                        WHEN 'Withdrawn' THEN 'WITH' END AS [stat.code],
                                       CONVERT(varchar(10),K.[Notified Date],103) AS [Date.repd], --First example of the dd/MM/yyyy format
                                       CONVERT(varchar(10),K.[Loss Date],103) AS [Loss.date], --Another example of the dd/MM/yyyy format
                                       CASE WHEN K.[Date Closed] IS NOT NULL THEN CONVERT(varchar(10), GETDATE(), 103) END AS [Stat.date], -- and another example of the dd/MM/yyyy format
                                       CONVERT(varchar(10),K.[Date Closed],103) AS [Date.Settled], --you get the idea. :)
                                       CASE WHEN K.[Date Closed] IS NOT NULL AND K.[Incident Type] = 'Windscreen' THEN 'Yes'
                                            WHEN K.[Date Closed] IS NULL THEN ''
                                            WHEN K.[NCB Decision] = 'Allowed' THEN 'Yes'
                                            WHEN K.[NCB Decision] = 'Disallowed' THEN 'Yes' END AS [Settled.free]
                                       /*
                                       CASE WHEN K.[Date Closed] IS NOT NULL AND K.[Incident Type] = 'Windscreen' THEN 'Yes'
                                            WHEN K.KGMReserve + K.KGMSettled = 0 AND K.[Date Closed] IS NOT NULL THEN 'Yes'
                                            WHEN K.KGMReserve + K.KGMSettled > 0 AND K.[Date Closed] IS NOT NULL THEN 'No'
                                            ELSE '' END AS [Settled.free]*/
                                FOR XML PATH('bch'),TYPE),
                               (SELECT K.BCAKey AS [KEY],
                                       K.[Vehicle Reg# No] AS [Reg.no],
                                       K.[Driver Name] AS [Driver],
                                       K.[ AD Paid] AS [Pay.ad],
                                       K.[AD Reserve] AS [Reserve.ad],
                                       K.[TPD Paid] + K.[TPI Paid] AS [Pay.tp],
                                       K.[TPD Reserve] + K.[TPI Reserve] AS [Reserve.tp],
                                       --K.[TPI Paid] AS [Pay.others],
                                       --K.[TPI Reserve] AS [Reserve.others],
                                       0 AS [Pay.others],
                                       0 AS [Reserve.others],
                                       K.KGMSettled AS [Pay.total],
                                       K.KGMReserve AS [Reserve.Total],
                                       K.[Recovery] AS [Pay.recovs],
                                       K.[AD Recovery Reserve] AS [Reserve.recovs],
                                       'Updated by FileDrop Service. XML Generated on ' + CONVERT(varchar(10),GETDATE(),103) as [Remarks4]
                                FOR XML PATH('bca'),TYPE),
                               (SELECT CONVERT(varchar(10),GETDATE(),103) AS [date],
                                       LEFT(CONVERT(varchar(10),GETDATE(),108),5) AS [time],
                                       'OO' AS [op],
                                       'FileDrop' AS [Name],
                                       K.KGMSettled AS [Settled],
                                       K.KGMReserve AS [Reserve],
                                       K.KGMSettled + K.KGMReserve As [Total],
                                       --CONVERT(varchar(10),K.DataToDate,103) AS [EffDate],
                                       CASE WHEN K.KGMSettled != K.BCHSettled THEN 'Payment'
                                            WHEN K.KGMReserve != K.BCHReserve THEN 'Reserve Adjustment'
                                            ELSE 'Payment' END AS [Notes]
                                FOR XML PATH('clam'),TYPE)
                        FOR XML PATH('broomsclaim'),TYPE)
               FOR XML PATH('broomsdata'),TYPE)
        FOR XML PATH('xmlexecute'),TYPE) AS InputXML,
        GETDATE() AS DateGenerated,
        0 AS TestLoad
FROM KGMCGStandard_viw K
WHERE K.ClaimsFound = 1 
  AND K.KGMFound = 1
  AND (K.KGMSettled != K.BCHSettled
   OR  K.KGMReserve != K.BCHReserve
   OR  (CONVERT(date,K.KGMClosure) != CONVERT(date,BCHClosure)
   OR   (K.KGMClosure IS NULL AND K.BCHClosure IS NOT NULL)
   OR   (K.KGMClosure IS NOT NULL AND K.BCHClosure IS NULL))
   OR (CASE WHEN K.[Date Closed] IS NOT NULL AND K.[Incident Type] = 'Windscreen' THEN 'Yes'
                                             WHEN K.[NCB Decision] = 'Allowed' THEN 'Yes'
                                             WHEN K.[NCB Decision] = 'Disallowed' THEN 'No' END != K.Settled_Free
   OR  (K.[Date Closed] IS NULL AND K.Settled_free IS NULL)))
  AND NOT EXISTS (SELECT 1
                  FROM AutoloadXML_tbl A
                  WHERE A.Branch = K.B@
                    AND A.PolicyRef = K.PolRef@
                    AND A.ClaimRef = K.ClaimRef@
                    AND (A.DateSubmitted IS NULL 
                     OR  A.Installed = 0))
ORDER BY K.ClaimRef@ ASC;
使用
CONVERT(varchar(10),YourDateColumn,103)
。我认为您的错误是试图转换为datetime(我猜您在使用样式代码时尝试了
转换(datetime,YourDateColumn,103)
);SQL Server中的日期/时间数据类型没有格式。试图格式化它们不会起任何作用

例如:
选择CONVERT(varchar(10),GETDATE(),103)
返回
varchar(10)
'11/05/2018'

编辑:下面是(临时)帮助OP展示我如何为OpenInterchange创建XML。OP使用了大量的子选择,这无助于提高查询速度。我已经强调了OP需要注意的几点:

SELECT K.Insco AS Insurer,
       K.B@ AS Branch,
       K.PolRef@ AS PolicyRef,
       K.ClaimRef@ AS ClaimRef,
       --XML Generation starts here.
       (SELECT(SELECT K.B@ AS branch,
               'OO' AS operator,
               'PDF' AS printtype
               FOR XML PATH('job'),TYPE),
              (SELECT (SELECT 'update-claim' AS [Char20.1]
                       FOR XML PATH('yzt'),TYPE)
               FOR XML PATH('parameters'),TYPE),
              (SELECT (SELECT (SELECT K.Ref@ AS Refno
                               FOR XML PATH('bcm'),TYPE)
                       FOR XML PATH('broomsclient'),TYPE),
                       (SELECT (SELECT K.PolRef@ AS Refno
                               FOR XML PATH('bpy'),TYPE)
                       FOR XML PATH('broomspolicy'),TYPE),
                       (SELECT (SELECT K.ClaimRef@ AS [Claim.No],
                                       K.[Claim No] AS [Ins.Claim.Ref],
                                       K.KGMSettled AS [Claim.Settled],
                                       K.KGMReserve AS [Claim.Reserve],
                                       K.KGMReserve + K.KGMSettled As [Claim.Amount],
                                       K.KGMStatus AS [Stat.Desc],
                                       CASE K.KGMStatus WHEN 'Settled' THEN 'SETT'
                                                        WHEN 'Ouststanding' THEN 'OUTS'
                                                        WHEN 'Declined' THEN 'DECL'
                                                        WHEN 'Not Taken up' THEN 'NTUP'
                                                        WHEN 'Withdrawn' THEN 'WITH' END AS [stat.code],
                                       CONVERT(varchar(10),K.[Notified Date],103) AS [Date.repd], --First example of the dd/MM/yyyy format
                                       CONVERT(varchar(10),K.[Loss Date],103) AS [Loss.date], --Another example of the dd/MM/yyyy format
                                       CASE WHEN K.[Date Closed] IS NOT NULL THEN CONVERT(varchar(10), GETDATE(), 103) END AS [Stat.date], -- and another example of the dd/MM/yyyy format
                                       CONVERT(varchar(10),K.[Date Closed],103) AS [Date.Settled], --you get the idea. :)
                                       CASE WHEN K.[Date Closed] IS NOT NULL AND K.[Incident Type] = 'Windscreen' THEN 'Yes'
                                            WHEN K.[Date Closed] IS NULL THEN ''
                                            WHEN K.[NCB Decision] = 'Allowed' THEN 'Yes'
                                            WHEN K.[NCB Decision] = 'Disallowed' THEN 'Yes' END AS [Settled.free]
                                       /*
                                       CASE WHEN K.[Date Closed] IS NOT NULL AND K.[Incident Type] = 'Windscreen' THEN 'Yes'
                                            WHEN K.KGMReserve + K.KGMSettled = 0 AND K.[Date Closed] IS NOT NULL THEN 'Yes'
                                            WHEN K.KGMReserve + K.KGMSettled > 0 AND K.[Date Closed] IS NOT NULL THEN 'No'
                                            ELSE '' END AS [Settled.free]*/
                                FOR XML PATH('bch'),TYPE),
                               (SELECT K.BCAKey AS [KEY],
                                       K.[Vehicle Reg# No] AS [Reg.no],
                                       K.[Driver Name] AS [Driver],
                                       K.[ AD Paid] AS [Pay.ad],
                                       K.[AD Reserve] AS [Reserve.ad],
                                       K.[TPD Paid] + K.[TPI Paid] AS [Pay.tp],
                                       K.[TPD Reserve] + K.[TPI Reserve] AS [Reserve.tp],
                                       --K.[TPI Paid] AS [Pay.others],
                                       --K.[TPI Reserve] AS [Reserve.others],
                                       0 AS [Pay.others],
                                       0 AS [Reserve.others],
                                       K.KGMSettled AS [Pay.total],
                                       K.KGMReserve AS [Reserve.Total],
                                       K.[Recovery] AS [Pay.recovs],
                                       K.[AD Recovery Reserve] AS [Reserve.recovs],
                                       'Updated by FileDrop Service. XML Generated on ' + CONVERT(varchar(10),GETDATE(),103) as [Remarks4]
                                FOR XML PATH('bca'),TYPE),
                               (SELECT CONVERT(varchar(10),GETDATE(),103) AS [date],
                                       LEFT(CONVERT(varchar(10),GETDATE(),108),5) AS [time],
                                       'OO' AS [op],
                                       'FileDrop' AS [Name],
                                       K.KGMSettled AS [Settled],
                                       K.KGMReserve AS [Reserve],
                                       K.KGMSettled + K.KGMReserve As [Total],
                                       --CONVERT(varchar(10),K.DataToDate,103) AS [EffDate],
                                       CASE WHEN K.KGMSettled != K.BCHSettled THEN 'Payment'
                                            WHEN K.KGMReserve != K.BCHReserve THEN 'Reserve Adjustment'
                                            ELSE 'Payment' END AS [Notes]
                                FOR XML PATH('clam'),TYPE)
                        FOR XML PATH('broomsclaim'),TYPE)
               FOR XML PATH('broomsdata'),TYPE)
        FOR XML PATH('xmlexecute'),TYPE) AS InputXML,
        GETDATE() AS DateGenerated,
        0 AS TestLoad
FROM KGMCGStandard_viw K
WHERE K.ClaimsFound = 1 
  AND K.KGMFound = 1
  AND (K.KGMSettled != K.BCHSettled
   OR  K.KGMReserve != K.BCHReserve
   OR  (CONVERT(date,K.KGMClosure) != CONVERT(date,BCHClosure)
   OR   (K.KGMClosure IS NULL AND K.BCHClosure IS NOT NULL)
   OR   (K.KGMClosure IS NOT NULL AND K.BCHClosure IS NULL))
   OR (CASE WHEN K.[Date Closed] IS NOT NULL AND K.[Incident Type] = 'Windscreen' THEN 'Yes'
                                             WHEN K.[NCB Decision] = 'Allowed' THEN 'Yes'
                                             WHEN K.[NCB Decision] = 'Disallowed' THEN 'No' END != K.Settled_Free
   OR  (K.[Date Closed] IS NULL AND K.Settled_free IS NULL)))
  AND NOT EXISTS (SELECT 1
                  FROM AutoloadXML_tbl A
                  WHERE A.Branch = K.B@
                    AND A.PolicyRef = K.PolRef@
                    AND A.ClaimRef = K.ClaimRef@
                    AND (A.DateSubmitted IS NULL 
                     OR  A.Installed = 0))
ORDER BY K.ClaimRef@ ASC;

由于您已经计算出了日期部分,我将把它留给您,但是您的查询可以通过使用条件聚合来简化。我在列名周围使用了方括号,而不是单引号。当然,这些工作,但我认为这是一个坏习惯,因为很难决定它是一个字符串文字或列别名。我也更喜欢使用alias=但这更像是一种偏好。我也更喜欢前导逗号,这也是我的偏好

非常确定这个查询应该做同样的事情

SELECT 1 as 'job/queue',
       @Branch as 'job/branch',
       CASE WHEN myli.PolRef@ IS NOT NULL THEN 'update-broomsrisk' ELSE 'create-broomsrisk' END as 'parameters/yzt/char20.1',
       SUBSTRING(@PolicyRef,1,6) as 'broomsdata/broomsclient/bcm/refno',
       @PolicyRef as 'broomsdata/broomspolicy/bpy/refno',
       CASE WHEN myli.PolRef@ IS NOT NULL THEN myli.key@ ELSE NULL END as 'broomsdata/broomspolicy/myli/KEY'
       , [broomsdata/broomspolicy/myli/Date1] = max(case when ct.RowNo = 1 then ISNULL(ct.convictiondate, ct.offencedate) end)
       , [broomsdata/broomspolicy/myli/Code1] = max(case when ct.RowNo = 1 then ct.code end)
       , [broomsdata/broomspolicy/myli/Fine1] = max(case when ct.RowNo = 1 then ct.fine end)
       , [broomsdata/broomspolicy/myli/Points1] = max(case when ct.RowNo = 1 then ct.noofpoints end)
       , [broomsdata/broomspolicy/myli/Date2] = max(case when ct.RowNo = 2 then ISNULL(ct.convictiondate, ct.offencedate) end)
       , [broomsdata/broomspolicy/myli/Code2] = max(case when ct.RowNo = 2 then ct.code end)
       , [broomsdata/broomspolicy/myli/Fine2] = max(case when ct.RowNo = 2 then ct.fine end)
       , [broomsdata/broomspolicy/myli/Points] = max(case when ct.RowNo = 2 then ct.noofpoints end)
       , [broomsdata/broomspolicy/myli/Date3] = max(case when ct.RowNo = 3 then ISNULL(ct.convictiondate, ct.offencedate) end)
       , [broomsdata/broomspolicy/myli/Code3] = max(case when ct.RowNo = 3 then ct.code end)
       , [broomsdata/broomspolicy/myli/Fine3] = max(case when ct.RowNo = 3 then ct.fine end)
       , [broomsdata/broomspolicy/myli/Points3] = max(case when ct.RowNo = 3 then ct.noofpoints end)
       , [broomsdata/broomspolicy/myli/Date4] = max(case when ct.RowNo = 4 then ISNULL(ct.convictiondate, ct.offencedate) end)
       , [broomsdata/broomspolicy/myli/Code4] = max(case when ct.RowNo = 4 then ct.code end)
       , [broomsdata/broomspolicy/myli/Fine4] = max(case when ct.RowNo = 4 then ct.fine end)
       , [broomsdata/broomspolicy/myli/Points4] = max(case when ct.RowNo = 4 then ct.noofpoints end)
FROM #ConvictionTable AS ct
LEFT OUTER JOIN [FIG-SQL-SRV].InfoCentre.dbo.ic_BD_MYLI AS myli ON ct.branch = myli.B@ AND ct.policyRef = myli.PolRef@
GROUP BY @Branch
    , CASE WHEN myli.PolRef@ IS NOT NULL THEN 'update-broomsrisk' ELSE 'create-broomsrisk' END
    , SUBSTRING(@PolicyRef,1,6)
    , @PolicyRef
    , CASE WHEN myli.PolRef@ IS NOT NULL THEN myli.key@ ELSE NULL END
FOR XML PATH('xmlexecute'), TYPE

由于您已经计算出了日期部分,我将把它留给您,但是您的查询可以通过使用条件聚合来简化。我在列名周围使用了方括号,而不是单引号。当然,这些工作,但我认为这是一个坏习惯,因为很难决定它是一个字符串文字或列别名。我也更喜欢使用alias=但这更像是一种偏好。我也更喜欢前导逗号,这也是我的偏好

非常确定这个查询应该做同样的事情

SELECT 1 as 'job/queue',
       @Branch as 'job/branch',
       CASE WHEN myli.PolRef@ IS NOT NULL THEN 'update-broomsrisk' ELSE 'create-broomsrisk' END as 'parameters/yzt/char20.1',
       SUBSTRING(@PolicyRef,1,6) as 'broomsdata/broomsclient/bcm/refno',
       @PolicyRef as 'broomsdata/broomspolicy/bpy/refno',
       CASE WHEN myli.PolRef@ IS NOT NULL THEN myli.key@ ELSE NULL END as 'broomsdata/broomspolicy/myli/KEY'
       , [broomsdata/broomspolicy/myli/Date1] = max(case when ct.RowNo = 1 then ISNULL(ct.convictiondate, ct.offencedate) end)
       , [broomsdata/broomspolicy/myli/Code1] = max(case when ct.RowNo = 1 then ct.code end)
       , [broomsdata/broomspolicy/myli/Fine1] = max(case when ct.RowNo = 1 then ct.fine end)
       , [broomsdata/broomspolicy/myli/Points1] = max(case when ct.RowNo = 1 then ct.noofpoints end)
       , [broomsdata/broomspolicy/myli/Date2] = max(case when ct.RowNo = 2 then ISNULL(ct.convictiondate, ct.offencedate) end)
       , [broomsdata/broomspolicy/myli/Code2] = max(case when ct.RowNo = 2 then ct.code end)
       , [broomsdata/broomspolicy/myli/Fine2] = max(case when ct.RowNo = 2 then ct.fine end)
       , [broomsdata/broomspolicy/myli/Points] = max(case when ct.RowNo = 2 then ct.noofpoints end)
       , [broomsdata/broomspolicy/myli/Date3] = max(case when ct.RowNo = 3 then ISNULL(ct.convictiondate, ct.offencedate) end)
       , [broomsdata/broomspolicy/myli/Code3] = max(case when ct.RowNo = 3 then ct.code end)
       , [broomsdata/broomspolicy/myli/Fine3] = max(case when ct.RowNo = 3 then ct.fine end)
       , [broomsdata/broomspolicy/myli/Points3] = max(case when ct.RowNo = 3 then ct.noofpoints end)
       , [broomsdata/broomspolicy/myli/Date4] = max(case when ct.RowNo = 4 then ISNULL(ct.convictiondate, ct.offencedate) end)
       , [broomsdata/broomspolicy/myli/Code4] = max(case when ct.RowNo = 4 then ct.code end)
       , [broomsdata/broomspolicy/myli/Fine4] = max(case when ct.RowNo = 4 then ct.fine end)
       , [broomsdata/broomspolicy/myli/Points4] = max(case when ct.RowNo = 4 then ct.noofpoints end)
FROM #ConvictionTable AS ct
LEFT OUTER JOIN [FIG-SQL-SRV].InfoCentre.dbo.ic_BD_MYLI AS myli ON ct.branch = myli.B@ AND ct.policyRef = myli.PolRef@
GROUP BY @Branch
    , CASE WHEN myli.PolRef@ IS NOT NULL THEN 'update-broomsrisk' ELSE 'create-broomsrisk' END
    , SUBSTRING(@PolicyRef,1,6)
    , @PolicyRef
    , CASE WHEN myli.PolRef@ IS NOT NULL THEN myli.key@ ELSE NULL END
FOR XML PATH('xmlexecute'), TYPE

列,而不是字段。神圣子查询重载蝙蝠侠。您不需要像这样一遍遍地从同一个表中查询子查询。一些条件聚合可以解决这个问题,更简单。列,而不是字段。神圣的子查询重载蝙蝠侠。您不需要像这样一遍遍地从同一个表中查询子查询。一些条件聚合可以解决这个问题,这要简单得多。Hi Larnu,当管道输出到XML时,它仍然返回yyyy-mm-dd.2015-06-05@Lynchie事实并非如此。我每天都使用SQL(不是开玩笑,我必须通过XML将100个保险索赔详细信息输入到系统中,并且我必须对每个日期值使用
dd/MM/yyyy
格式)。尝试
选择CONVERT(varchar(10),GETDATE(),103)作为XML路径(“根”)的日期值。返回值为
11/05/2018
CONVERT(VARCHAR(10),(从#conficationTable AS ct2,其中ct2.RowNo=1),103)“broomsdata/broomspolicy/myli/Date1”中选择ISNULL(ct2.conficationdate,ct2.offencedate),仍然返回2015-06-05,而不是2015年06月05日。听起来你在其他地方有一个隐式转换;因此,
varchar
值被转换回
日期
。这显然是为了OpenGI的开放交换,这就是我使用上述SQL的目的;我知道它能用。:)使用它时,它不会将返回的信息视为日期。转换(VARCHAR(12),CAST((选择ISNULL(ct2.confirationdate,ct2.offencedate)从#confirationtable AS ct2,其中ct2.RowNo=1)转换为日期),103)'broomsdata/broomspolicy/myli/Date1',Hi Larnu,当管道输出到XML时,仍然返回yyyy-mm-dd.2015-06-05@Lynchie事实并非如此。我每天都使用SQL(不是开玩笑,我必须通过XML将100个保险索赔详细信息输入到系统中,并且我必须对每个日期值使用
dd/MM/yyyy
格式)。尝试
选择CONVERT(varchar(10),GETDATE(),103)作为XML路径(“根”)的日期值。返回值为
11/05/2018
CONVERT(VARCHAR(10),(从#conficationTable AS ct2,其中ct2.RowNo=1),103)“broomsdata/broomspolicy/myli/Date1”中选择ISNULL(ct2.conficationdate,ct2.offencedate),仍然返回2015-06-05,而不是2015年06月05日。听起来你在其他地方有一个隐式转换;因此,
varchar
值被转换回
日期
。这显然是为了OpenGI的开放交换,这就是我使用上述SQL的目的;我知道它能用。:)使用它时,它不会将返回的信息视为日期。转换(VARCHAR(12),CAST((选择ISNULL(ct2.confirationdate,ct2.offencedate)从#confirationtable AS ct2,其中ct2.RowNo=1)转换为日期),103)'bromsdata/bromspolicy/myli/Date1',