Разница панд между datetime64 [нс] в миллисекундах

Если я правильно понял, вы имеете в виду поведение, которое вы можете увидеть в запросе типа:

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
  

1
задан Blue Moon 16 January 2019 в 15:46
поделиться

1 ответ

Редактировать: Получить 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.

0
ответ дан Charles Landau 16 January 2019 в 15:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: