Если я правильно понял, вы имеете в виду поведение, которое вы можете увидеть в запросе типа:
DECLARE @Order TABLE (
OrderID INT,
OrderDate DATETIME)
DECLARE @OrderDetail TABLE (
OrderID INT,
ItemID VARCHAR(1),
ItemName VARCHAR(50),
Qty INT)
INSERT @Order
VALUES
(1, '2010-01-01'),
(2, '2010-01-02')
INSERT @OrderDetail
VALUES
(1, 'A', 'Drink', 5),
(1, 'B', 'Cup', 2),
(2, 'A', 'Drink', 2),
(2, 'C', 'Straw', 1),
(2, 'D', 'Napkin', 1)
;WITH XMLNAMESPACES('http://test.com/order' AS od)
SELECT
OrderID AS "@OrderID",
(SELECT
ItemID AS "@od:ItemID",
ItemName AS "data()"
FROM @OrderDetail
WHERE OrderID = o.OrderID
FOR XML PATH ('od.Item'), TYPE)
FROM @Order o
FOR XML PATH ('od.Order'), TYPE, ROOT('xml')
. Это дает следующие результаты:
Drink
Cup
Drink
Straw
Napkin
Как вы сказали, пространство имен повторяется в результатах подзапросов.
Это поведение является функцией в соответствии с беседой на devnetnewsgroup (веб-сайт теперь не функционирует), хотя есть возможность голосовать при его изменении.
Мое предлагаемое решение - вернуться к FOR XML EXPLICIT
:
SELECT
1 AS Tag,
NULL AS Parent,
'http://test.com/order' AS [xml!1!xmlns:od],
NULL AS [od:Order!2],
NULL AS [od:Order!2!OrderID],
NULL AS [od:Item!3],
NULL AS [od:Item!3!ItemID]
UNION ALL
SELECT
2 AS Tag,
1 AS Parent,
'http://test.com/order' AS [xml!1!xmlns:od],
NULL AS [od:Order!2],
OrderID AS [od:Order!2!OrderID],
NULL AS [od:Item!3],
NULL [od:Item!3!ItemID]
FROM @Order
UNION ALL
SELECT
3 AS Tag,
2 AS Parent,
'http://test.com/order' AS [xml!1!xmlns:od],
NULL AS [od:Order!2],
o.OrderID AS [od:Order!2!OrderID],
d.ItemName AS [od:Item!3],
d.ItemID AS [od:Item!3!ItemID]
FROM @Order o INNER JOIN @OrderDetail d ON o.OrderID = d.OrderID
ORDER BY [od:Order!2!OrderID], [od:Item!3!ItemID]
FOR XML EXPLICIT
И увидеть эти результаты:
Drink
Cup
Drink
Straw
Napkin
Редактировать: Получить timedeltas, затем прочитать & amp; конвертировать их микросекунды.
df["new"] = df.ts1 - df.ts2
df["new"] = df.new.apply(lambda x: x.microseconds/1000)
Этот старый ответ получает только микросекунды
.dt.microsecond
это способ
df["new"] = df.ts1.dt.microsecond - df.ts2.dt.microsecond
Обратите внимание на коэффициент преобразования между мили секунд 1000:1
, так что ...
df["new"] = (df.ts1.dt.microsecond - df.ts2.dt.microsecond)/1000
Насколько я могу судить, нет эквивалента .dt.milisecond
.