Работа с различными форматами дат

Очистка данных в базах данных SQL Server

Miriam Antona

Software Engineer

Различные форматы дат

  • Американский английский (месяц/день/год)
    • 04/15/2008
  • Испанский (день/месяц/год)
    • 15/04/2008
  • ...
Очистка данных в базах данных SQL Server

Проверка формата дат в таблицах

SELECT *
FROM pilots
| pilot_code | pilot_name | pilot_surname | carrier_code | entry_date |
|------------|------------|---------------|--------------|------------|
| 1          | Thomas     | Peters        | HA           | 2011-10-01 |
| 2          | Hiroki     | Konoe         | MQ           | 2011-01-21 |
| 3          | Arturo     | Montero       | UA           | 2012-12-28 |
| 4          | David      | Captain       | US           | 2000-10-01 |
| 5          | Ainhoa     | Guerrera      | VX           | 2000-10-05 |
| 6          | Alvin      | Andersen      | OO           | 2012-01-15 |
| 7          | William    | Champy        | F9           | 2011-03-15 |
| ...        | ...        | ...           | ...          | ...        |
  • Формат: yyyy-MM-dd
Очистка данных в базах данных SQL Server

Функции для изменения формата дат

  • CONVERT
  • FORMAT
Очистка данных в базах данных SQL Server

CONVERT

CONVERT(data_type[(length)], expression [, style])
Очистка данных в базах данных SQL Server

CONVERT

SELECT     
    CONVERT(VARCHAR(11), CAST(entry_date AS DATE), 0) AS '0',
    CONVERT(VARCHAR(10), CAST(entry_date AS DATE), 1) AS '1',
    CONVERT(VARCHAR(10), CAST(entry_date AS DATE), 101) AS '101',
    CONVERT(VARCHAR(10), CAST(entry_date AS DATE), 2) AS '2',
    CONVERT(VARCHAR(10), CAST(entry_date AS DATE), 120) AS '202'
FROM pilots
| 0           | 1        | 101        | 2        | 202        |
|-------------|----------|------------|----------|------------|
| Oct 1 2011  | 10/01/11 | 10/01/2011 | 11.10.01 | 2011-10-01 |
| Jan 21 2011 | 01/21/11 | 01/21/2011 | 11.01.21 | 2011-01-21 |
| Dec 28 2012 | 12/28/12 | 12/28/2012 | 12.12.28 | 2012-12-28 |
| Oct 1 2000  | 10/01/00 | 10/01/2000 | 00.10.01 | 2000-10-01 |
| ...         | ...      | ...        | ...      | ...        |
Очистка данных в базах данных SQL Server

CONVERT

Без века (yy) С веком (yyyy) Стандарт Вывод
0 100 По умолчанию mon dd yyyy hh:miAM (or PM)
1 101 США mm/dd/yyyy
2 102 ANSI yyyy.mm.dd
3 103 Британский/Французский dd/mm/yyyy
5 105 Итальянский dd-mm-yyyy
... ... ... ...
10 110 USA mm-dd-yyyy
12 112 ISO yyyymmdd
... ... ... ...
Очистка данных в базах данных SQL Server

FORMAT

FORMAT ( value, format [, culture ] ) 
  • Гибче, чем CONVERT
  • Ниже производительность
  • Не рекомендуется при больших объёмах данных
Очистка данных в базах данных SQL Server

FORMAT

SELECT FORMAT (CAST(entry_date AS DATE), 'd', 'en-US' ) AS 'US English Result',    
       FORMAT (CAST(entry_date AS DATE), 'd', 'de-de' ) AS 'German Result',
       FORMAT (CAST(entry_date AS DATE), 'D', 'en-US' ) AS 'US English Result',
       FORMAT (CAST(entry_date AS DATE), 'dd/MM/yyyy') AS 'DateTime Result' 
from pilots
| US English Result | German Result | US English Result         | DateTime Result |
|-------------------|---------------|---------------------------|-----------------|
| 10/1/2011         | 01.10.2011    | Saturday, October 1, 2011 | 01/10/2011      |
| 1/21/2011         | 21.01.2011    | Friday, January 21, 2011  | 21/01/2011      |
| 12/28/2012        | 28.12.2012    | Friday, December 28, 2012 | 28/12/2012      |
| ...               | ...           | ...                       | ...             |
Очистка данных в базах данных SQL Server

Давайте потренируемся!

Очистка данных в базах данных SQL Server

Preparing Video For Download...