Аккаунт Modern SQL Twitter ( от Markus Winand ) опубликовал подсказку о том, как извлечь часть даты в SQL:
Это правда? Да, это так, в стандарте SQL и во множестве совместимых со стандартами баз данных. Но давайте проверим, что делает jOOQ при запуске следующей программы на всех 18 поддерживаемых в настоящее время СУБД
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
import static org.jooq.impl.DSL.currentDate; import static org.jooq.impl.DSL.extract; import static org.jooq.impl.DSL.using; import java.util.stream.Stream; import org.jooq.DatePart; import org.jooq.SQLDialect; public class Extract { public static void main(String[] args) { // Get all distinct SQLDialect families Stream .of(SQLDialect.values()) .map(SQLDialect::family) .distinct() .forEach(family -> { System.out.println(); System.out.println(family); // Get all supported date parts Stream .of(DatePart.values()) // For each family / part, get the // EXTRACT() function .map(part -> extract(currentDate(), part)) .forEach(expr -> { System.out.println( using(family).render(expr) ); }); }); } } |
Выход:
Базы данных с открытым исходным кодом
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
DEFAULT extract(year from current_date()) extract(month from current_date()) extract(day from current_date()) extract(hour from current_date()) extract(minute from current_date()) extract(second from current_date()) CUBRID extract(year from current_date()) extract(month from current_date()) extract(day from current_date()) extract(hour from current_date()) extract(minute from current_date()) extract(second from current_date()) DERBY year(current_date) month(current_date) day(current_date) hour(current_date) minute(current_date) second(current_date) FIREBIRD extract(year from current_date) extract(month from current_date) extract(day from current_date) extract(hour from current_date) extract(minute from current_date) extract(second from current_date) H2 extract(year from current_date()) extract(month from current_date()) extract(day from current_date()) extract(hour from current_date()) extract(minute from current_date()) extract(second from current_date()) HSQLDB extract(year from current_date) extract(month from current_date) extract(day from current_date) extract(hour from current_date) extract(minute from current_date) extract(second from current_date) MARIADB extract(year from current_date()) extract(month from current_date()) extract(day from current_date()) extract(hour from current_date()) extract(minute from current_date()) extract(second from current_date()) MYSQL extract(year from current_date()) extract(month from current_date()) extract(day from current_date()) extract(hour from current_date()) extract(minute from current_date()) extract(second from current_date()) POSTGRES extract(year from current_date) extract(month from current_date) extract(day from current_date) extract(hour from current_date) extract(minute from current_date) extract(second from current_date) SQLITE strftime( '%Y' , current_date) strftime( '%m' , current_date) strftime( '%d' , current_date) strftime( '%H' , current_date) strftime( '%M' , current_date) strftime( '%S' , current_date) |
Коммерческие базы данных
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
ACCESS datepart( 'yyyy' , date()) datepart( 'm' , date()) datepart( 'd' , date()) datepart( 'h' , date()) datepart( 'n' , date()) datepart( 's' , date()) ASE datepart(yy, current_date()) datepart(mm, current_date()) datepart(dd, current_date()) datepart(hh, current_date()) datepart(mi, current_date()) datepart(ss, current_date()) DB2 year(current_date) month(current_date) day(current_date) hour(current_date) minute(current_date) second(current_date) HANA extract(year from current_date) extract(month from current_date) extract(day from current_date) extract(hour from current_date) extract(minute from current_date) extract(second from current_date) INFORMIX year(current year to day) month(current year to day) day(current year to day) current year to day::datetime hour to hour:: char ( 2 ):: int current year to day::datetime minute to minute:: char ( 2 ):: int current year to day::datetime second to second:: char ( 2 ):: int INGRES extract(year from current_date) extract(month from current_date) extract(day from current_date) extract(hour from current_date) extract(minute from current_date) extract(second from current_date) ORACLE (in jOOQ 3.5 ) to_char(trunc(sysdate), 'YYYY' ) to_char(trunc(sysdate), 'MM' ) to_char(trunc(sysdate), 'DD' ) to_char(trunc(sysdate), 'HH24' ) to_char(trunc(sysdate), 'MI' ) to_char(trunc(sysdate), 'SS' ) ORACLE (in jOOQ 3.6 ) extract(year from current_date) extract(month from current_date) extract(day from current_date) extract(hour from cast(current_date as timestamp)) extract(minute from cast(current_date as timestamp)) extract(second from cast(current_date as timestamp)) SQLSERVER datepart(yy, convert(date, current_timestamp)) datepart(mm, convert(date, current_timestamp)) datepart(dd, convert(date, current_timestamp)) datepart(hh, convert(date, current_timestamp)) datepart(mi, convert(date, current_timestamp)) datepart(ss, convert(date, current_timestamp)) SYBASE datepart(yy, current date) datepart(mm, current date) datepart(dd, current date) datepart(hh, current date) datepart(mi, current date) datepart(ss, current date) |
Да. Стандарт … Если бы он был полностью реализован …
Ссылка: | Как извлечь часть даты в SQL от нашего партнера по JCG Лукаса Эдера из блога JAVA, SQL и JOOQ . |