2013-09-03 11 views
41

Niezliczoną ilość razy w ciągu dnia kopiuję i wklejam rekordy z SQL Server Management Studio do Excela.Pola DateTime z SQL Server wyświetlają się niepoprawnie w Excelu

Mój problem polega na tym, że wartość DateTime, taka jak 8/23/2013 4:51:02 PM, nie wyświetla się prawidłowo, jak pokazano na poniższym obrazku, mimo że jest poprawnie wyświetlana w polu funkcji.

enter image description here

Zmiana typu danych do ShortDate rozwiązuje problemy z wyświetlaniem, ale jest to uciążliwe zrobić, ponieważ mam wiele pól daty do pliku PDF. Ponieważ zarówno Excel, jak i SQL Server są produktami Microsoft, można by oczekiwać, że Excel będzie mógł prawidłowo wyświetlać pole daty.

EDYCJA: Wygląda na to, że jest to problem z wyświetlaniem w programie Excel. Skopiowałem wyniki mojego Management Studio do Notatnika, a następnie do Excela i nadal mam ten sam problem. Kopiowanie 2013-08-23 16:52:11.493 z Notatnika do Excela wyświetli 52:11.5 (wyświetla minuty, sekundy i zaokrąglone milisekundy). Wersja programu Excel to rok 2010.

Jakieś pomysły, aby to uprościć?

+0

Możliwy duplikat http://stackoverflow.com/questions/18396706/in-excel-sheet-cell-not-showing-the-content-properly – pnuts

+0

@Tip_Top Nie szukałem skoczyć poprzez garść obręczy, po prostu w łatwy sposób skopiować i wkleić datę z jednego środowiska do drugiego. – Andre

Odpowiedz

9

Miałem ten sam problem co Andre. Wydaje się, że nie ma bezpośredniego rozwiązania, ale CAST w zapytaniu, które generuje dane, rozwiązuje problem, o ile można żyć w ograniczeniach z SMALLDATETIME. W poniższym zapytaniu pierwsza kolumna nie jest poprawnie formatowana w programie Excel, a druga nie.

SELECT GETDATE() wlewka (GETDATE() jako smalldatetime)

Może ułamkowa część sekundy DateTime datetime2 dezorientuje Excel.

+0

Dzięki za wskazanie mi we właściwym kierunku - udało mi się to potwierdzić - ułamkowa część sekundy rzeczywiście mylona z doskonałością. Program Excel mógł poprawnie wkleić datę/czas w formacie "yyyy-MM-dd HH: mm: ss". – Omaer

0

Wypróbuj następujące funkcje: Wklej "Excel 2004: 00: 00: 00: 00.000".

Teraz spróbuj wklej "2004-06-01 00:00:00" do programu Excel.

Excel wydaje się nie być w stanie obsłużyć milisekund podczas wklejania ...

+0

Witamy w SO! Spróbuj wyjaśnić, co należy obserwować. Zachowanie Excela może się zmienić w przyszłych wersjach, a wtedy twoja odpowiedź byłaby bardzo myląca. – Palec

62

Miałem też problem z tym problemem po prostu kopiowanie i wklejanie pól DateTime z SQL Management Studio do programu Excel do manipulacji. Excel ma poprawną wartość DATETIME (nawet jeśli formatowanie zostanie zastosowane po wklejeniu), ale domyślnie nie ma wbudowanego formatu, aby pokazać SQL DATETIME. Oto poprawka:

Kliknij prawym przyciskiem myszy komórkę i wybierz Formatuj komórki. Wybierz Niestandardowy. W Typ: polu tekstowym wpisać

yyyy-mm-dd hh:mm:ss.000 

referencyjny: http://office.microsoft.com/en-us/excel-help/create-a-custom-number-format-HP010342372.aspx

2

Chociaż nie jest pełna odpowiedź na pytanie, istnieją skróty klawiszowe w Excelu do zmiany formatowania zaznaczonej komórki (ów) albo Data, albo godzina (niestety nie znalazłem jednego dla daty + czasu).

Tak więc, jeśli jesteś po prostu patrząc na daty, można wykonać następujące czynności: zakres

  1. odpis z SQL Server Management Studio
  2. wkleić do programu Excel
  3. Zaznacz zakres komórek, które muszą formatowane jako daty
  4. Prasa Ctrl + Shift + 3

Aby sformatować jako Times, użyj Ctrl + Shift + 2.

Można to wykorzystać w SQL Server

SELECT CONVERT (nvarchar (19), ColumnName, 121) AS [zmiana] z tabeli

+0

Nie działa w moim Excel 2013. – slartidan

0

ja miałem ten sam problem na chwilę jako Generuję sporą liczbę raportów ad-hoc z SQL Server i kopiuję/wklejam je do Excela. Chciałbym również powitać właściwe rozwiązanie, ale moim tymczasowym obejściem było utworzenie domyślnego makra w programie Excel, które konwertuje podświetlone komórki do formatu daty i godziny Excel i przypisuje go do klawisza skrótu (Shift-Ctrl-D w moim przypadku). Otwieram program Excel, kopiuję/wkleja z SSMS do nowego arkusza programu Excel, podświetlam kolumnę do przekonwertowania i naciskam Shift-Ctrl-D. Zadanie wykonane.

+2

Jeśli chcesz umieścić to jako odpowiedź, czy możesz dołączyć kod swojego makra? To sprawiłoby, że ta odpowiedź byłaby o wiele bardziej pomocna dla innych użytkowników. –

1

Oto hack, który może być pomocny ... umieszcza apostrof przed wartością czasu, więc po kliknięciu prawym przyciskiem myszy na wyjście SSMS i powiedz "Kopiuj z nagłówkami", a następnie wklejeniu do Excela, zachowuje milisekundy/nanosekundy dla wartości datetime2. To trochę brzydkie, że umieszcza tam apostrof, ale jest to lepsze niż frustracja w pracy z Excelem, polegająca na niechcianym zaokrąglaniu wartości czasu. Data jest w formacie brytyjskim, ale możesz spojrzeć na stronę funkcji CONVERT w MSDN.

SELECT CONVERT (VARCHAR (23) sm.MilestoneDate, 103), jak MilestoneDate, '' '' + CONVERT (VARCHAR (23) sm.MilestoneDate, 114), jak MilestoneTime Z SomeTable SM

1

znalazł rozwiązanie, które robi wymaga, aby pamiętać i wpisywać niestandardowy format datetime yyyy-mm-dd hh:mm:ss.000

  • na nowej komórki, pisać albo =NOW() lub dowolną poprawną datę + czas jak 5/30/2017 17:35: będzie wyświetlać się poprawnie w języku polskim, np 5/30/2017 5:35:00 PM
  • Wybierz komórkę, kliknij na Format Painter ikonę (pędzla)
  • Teraz kliknij na nagłówek wiersza kolumny, które chcesz zastosować formatowanie.

Spowoduje to skopiowanie prawidłowego formatu datetime do całej kolumny, dzięki czemu będzie wyświetlany poprawnie.

0

Wiem, że jest już za późno na odpowiedź na to pytanie. Ale pomyślałem, że miło byłoby podzielić się tym, jak to rozwiązałem, kiedy miałem ten sam problem. Oto co zrobiłem.

  • przed skopiowaniem danych, wybierz kolumnę w Excel i wybierz „komórki format” i wybierz „Tekst” i kliknij „OK” (Tak, jeśli dane SQL ma 3rd kolumny jako DateTime, a następnie zastosować tę formatowanie do 3 kolumny w programie Excel) Step 1
  • Teraz, skopiuj i wklej dane z SQL do Excela i będzie miał wartość datetime we właściwym formacie. Step 2