Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

przekonwertuj varchar (ddmmyyyy) na format daty

ddmmyyyy nie jest prawidłowym formatem daty. Musisz najpierw przekształcić ten ciąg w coś, co można przetworzyć jako DATE / DATETIME . Najszybszym sposobem może być po prostu SUBSTRING kawałki w mm/dd/yyyy format. To skutecznie konwertuje. Ale masz VARCHAR(8) . Więc albo musisz zwiększyć to do VARCHAR(10) (lub jeszcze lepiej, po prostu CHAR(10) ) lub zadeklaruj zmienną lokalną do przechowywania zmienionej wartości.

Na przykład:

DECLARE @Date VARCHAR(8); -- input parameter
SET @Date = '25032014';

DECLARE @Date2 CHAR(10);
SET @Date2 = SUBSTRING(@Date, 3, 2)
             + '/' + SUBSTRING(@Date, 1, 2)
             + '/' + SUBSTRING(@Date, 5, 4);

SELECT @Date2, CONVERT(DATE, @Date2);
-- 03/25/2014     2014-03-25

EDYTUJ: Właściwie znalazłem nieco prostszy sposób. Zacząłem od tej metody, ale zdałem sobie sprawę, że nie działa z ddmmyyyy w przeciwieństwie do mmddyyyy . Jakoś przegapiłem, że był odpowiedni numer stylu daty dla dd/mm/yyyy . Po prostu dodaj dwa ukośniki do przychodzącego ciągu, a następnie wywołaj CONVERT działa, ale tylko jeśli używasz 103 jako „styl”. I podobnie jak pierwsze rozwiązanie, wymaga zmiany parametru przychodzącego na VARCHAR(10) lub CHAR(10) zamiast VARCHAR(8) , lub utworzenie zmiennej lokalnej jako CHAR(10) .

DECLARE @Date VARCHAR(8); -- input parameter
SET @Date = '25032014';

DECLARE @Date2 CHAR(10);
SET @Date2 = STUFF(STUFF(@Date, 3, 0, '/'), 6, 0, '/');

SELECT @Date2, CONVERT(DATE, @Date2, 103); -- 103 = dd/mm/yyyy
-- 25/03/2014     2014-03-25

„Style” konwersji można znaleźć na stronie MSDN dla CAST and CONVERT .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. podstawowa wstawka zbiorcza pyodbc

  2. wybierz jeden wiersz na identyfikator

  3. Funkcja podziału w SQL Server 2008

  4. Jak nauczyć się MS SQL Server 2005?

  5. Jak nadać uprawnienia (tabela) w SQL Server 2008?