Аккаунт 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
|
DEFAULTextract(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())CUBRIDextract(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())DERBYyear(current_date)month(current_date)day(current_date)hour(current_date)minute(current_date)second(current_date)FIREBIRDextract(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)H2extract(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())HSQLDBextract(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)MARIADBextract(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())MYSQLextract(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())POSTGRESextract(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)SQLITEstrftime('%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
|
ACCESSdatepart('yyyy', date())datepart('m', date())datepart('d', date())datepart('h', date())datepart('n', date())datepart('s', date())ASEdatepart(yy, current_date())datepart(mm, current_date())datepart(dd, current_date())datepart(hh, current_date())datepart(mi, current_date())datepart(ss, current_date())DB2year(current_date)month(current_date)day(current_date)hour(current_date)minute(current_date)second(current_date)HANAextract(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)INFORMIXyear(current year to day)month(current year to day)day(current year to day)current year to day::datetime hour to hour::char(2)::intcurrent year to day::datetime minute to minute::char(2)::intcurrent year to day::datetime second to second::char(2)::intINGRESextract(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))SQLSERVERdatepart(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))SYBASEdatepart(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 . |