Formatting datetime values returned in a SELECT..FOR XML statement
-
16-06-2021 - |
Question
Consider the following table:
Orders
OrderId Date CustomerId
1000 2012-06-05 20:03:12.000 51
1001 2012-06-16 12:02:31.170 48
1002 2012-06-18 19:45:16.000 33
When I extract the Order data using FOR XML:
SELECT
OrderId AS 'Order/@Order-Id',
Date AS 'Order/ShipDate',
CustomerId AS 'Order/Customer'
FROM Orders
WHERE OrderId = 1000
FOR XML PATH ('')
I get the following result:
<Order Order-Id="1000">
<ShipDate>2010-02-20T16:03:12</ShipDate>
<Customer>51</Customer>
</Order>
The problem is, the ShipDate
value in the XML file needs to be in the format M/DD/YYYY H:mm:ss PM
. How can I change the output of the ShipDate
in the XML file to the desired format?
Any help would be greatly appreciated!
La solution
Similar to Andomar's solution, but this provides the requested h:mm:ss PM
format for the time:
DECLARE @o TABLE(OrderId INT, [Date] DATETIME, CustomerId INT);
INSERT @o SELECT 1000,'2012-06-05 20:03:12',51
UNION ALL SELECT 1001,'2012-06-16 12:02:31',48
UNION ALL SELECT 1002,'2012-06-18 19:45:16',33;
SELECT
OrderId AS 'Order/@Order-Id',
CONVERT(CHAR(10), [Date], 101)
+ ' ' + LTRIM(RIGHT(CONVERT(CHAR(20), [Date], 22), 11))
AS 'Order/ShipDate',
CustomerId AS 'Order/Customer'
FROM @o --WHERE OrderId = 1000
FOR XML PATH ('');
Results:
<Order Order-Id="1000">
<ShipDate>06/05/2012 8:03:12 PM</ShipDate>
<Customer>51</Customer>
</Order>
<Order Order-Id="1001">
<ShipDate>06/16/2012 12:02:31 PM</ShipDate>
<Customer>48</Customer>
</Order>
<Order Order-Id="1002">
<ShipDate>06/18/2012 7:45:16 PM</ShipDate>
<Customer>33</Customer>
</Order>
Autres conseils
Here's an example of how you can use CONVERT to format a date like mm-dd-yyyy hh:mmAM
:
select convert(varchar(19), OrderDate, 110) + ' ' +
substring(convert(varchar(19), OrderDate, 100),13,8) AS 'Order/ShipDate'
from (
select cast('2012-06-01 01:00' as datetime) as OrderDate
union all select cast('2012-06-01 14:00' as datetime)
union all select cast('2012-06-11 23:00' as datetime)
) Orders
for xml path ('')
This prints:
<Order>
<ShipDate>06-01-2012 1:00AM</ShipDate>
</Order>
<Order>
<ShipDate>06-01-2012 2:00PM</ShipDate>
</Order>
<Order>
<ShipDate>06-11-2012 11:00PM</ShipDate>
</Order>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow