Skalární funkce ODBC můžete použít při spouštění příkazů T-SQL na serveru SQL Server. Existují různé typy skalárních funkcí ODBC, včetně řetězcových funkcí, numerických funkcí, systémových funkcí a samozřejmě funkcí datum/čas (také označované jako funkce data, času a intervalu).
Níže jsou uvedeny příklady funkcí data, času a intervalu, které můžete použít v SQL Server.
Syntaxe
Za prvé, zde je syntaxe, kterou musíte použít při každém volání skalární funkce ODBC:
SELECT {fn[ ( ,....n) ] }
Kde <function_name>
je název funkce a (<argument>,....n)
je libovolný počet volitelných argumentů.
Hlavní věc, kterou je třeba si zapamatovat, je, že když voláte skalární funkci ODBC, musíte volání funkce uzavřít do složených závorek ({}
) a před jménem předponu fn
.
Příklad 1 – NOW()
Tato funkce vrací aktuální datum a čas jako hodnotu časového razítka.
VYBERTE {fn NOW()} jako výsledek;
Výsledek:
+-------------------------+| Výsledek ||-------------------------|| 2018-06-13 21:52:25.667 |+-------------------------+
Příklad 2 – Časové razítko, datum a čas
CURRENT_TIMESTAMP()
funkce vrací aktuální místní datum a místní čas jako hodnotu časového razítka. Můžete také použít CURRENT_DATE()
vrátit pouze část s datem a/nebo CURRENT_TIME()
vrátit pouze časovou část.
VYBERTE {fn CURRENT_TIMESTAMP()} JAKO 'Datum a čas', {fn CURRENT_DATE()} JAKO 'Datum', {fn CURRENT_TIME()} JAKO 'Čas';
Výsledek:
+-------------------------+------------+------- -------+| Datum a čas | Datum | Čas ||-------------------------+------------+--------- ------|| 2018-06-13 21:57:29.197 | 2018-06-13 | 21:57:29.197 |+-------------------------+------------+---- ----------+
Také CURRENT_TIMESTAMP()
a CURRENT_TIME()
oba přijímají volitelný argument k určení sekundové přesnosti vrácené hodnoty.
Příklady:
VYBERTE {fn CURRENT_TIMESTAMP(3)} JAKO 'Datum a čas', {fn CURRENT_TIME(6)} JAKO 'Čas';
Výsledek:
+-------------------------+-----------------+| Datum a čas | Čas ||-------------------------+-----------------|| 2018-06-13 22:00:59.263 | 22:00:59.263000 |+-------------------------+----------------- +
V tomto příkladu CURRENT_TIMESTAMP()
vrátí sekundovou přesnost 3, zatímco CURRENT_TIME()
vrátí sekundovou přesnost 6.
Příklad 3 – CURDATE() a CURTIME()
Můžete použít CURDATE()
a/nebo CURTIME()
jako alternativa k výše uvedeným funkcím data a času:
VYBERTE {fn CURDATE()} JAKO 'Datum', {fn CURTIME()} JAKO 'Čas';
Výsledek:
+------------+--------------+| Datum | Čas ||------------+--------------|| 2018-06-13 | 22:05:20.013 |+------------+--------------+
Upozorňujeme, že tyto argumenty nepřijímají žádné argumenty, takže pokud potřebujete určit přesnost v sekundách, použijte CURRENT_DATE()
a/nebo CURRENT_TIME()
místo toho.
Příklad 4 – Dny a týdny
Existuje spousta skalárních funkcí ODBC pro vrácení konkrétních částí hodnoty data. Tyto funkce přijímají argument, což je výraz data, ze kterého se má extrahovat požadovaná část data.
Zde jsou různé funkce pro vrácení části dnů a týdnů od data:
DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';VYBERTE {fn DAYNAME(@date)} JAKO 'DAYNAME', {fn DAYOFYEAR(@date)} JAKO 'DAYOFYEAR', {fn DAYOFMONTH(@date)} JAKO 'DAYOFMONTH', {fn DAYOFWEEK(@date)} JAKO 'DAYOFWEEK', {fn WEEK(@date)} JAKO 'WEEK';
Výsledek:
+-----------+-------------+--------------+----- --------+--------+| DAYNAME | DAYOFYEAR | DAYOFMONTH | DAYOFWEEK | TÝDEN ||-----------+-------------+--------------+------ -------+--------|| pondělí | 45 | 14 | 2 | 8 |+-----------+-------------+--------------+------ -------+--------+
V tomto případě jsme přiřadili datum proměnné a poté tuto proměnnou předali každé funkci. Funkce poté vrátila příslušnou část data.
Příklad 5 – měsíce, čtvrtletí a roky
Zde jsou různé funkce pro vrácení části měsíce, čtvrtletí a roku z hodnoty data/času:
DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';VYBERTE {fn YEAR(@date)} JAKO 'YEAR', {fn MONTH(@date)} JAKO 'MONTH', {fn MONTHNAME(@date)} JAKO 'MONTHNAME', {fn QUARTER(@date)} JAKO 'QUARTER';
Výsledek:
+--------+---------+-------------+-----------+| ROK | MĚSÍC | NÁZEV MĚSÍCE | ČTVRTLETÍ ||--------+---------+-------------+-----------|| 2000 | 2 | února | 1 |+--------+---------+-------------+-----------+Příklad 6 – hodiny, minuty a sekundy
Zde jsou různé funkce pro vrácení části hodin, minut a sekund z hodnoty data/času:
DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';VYBERTE {fn HOUR(@date)} JAKO 'HOUR', {fn MINUTE(@date)} JAKO 'MINUTE', {fn SECOND(@date)} JAKO 'SECOND';Výsledek:
+--------+----------+----------+| HODINA | MINUTA | DRUHÝ ||--------+----------+----------|| 7 | 31 | 58 |+--------+----------+----------+Příklad 7 – Funkce EXTRACT()
Existuje také skalární funkce ODBC s názvem
EXTRACT()
, který umožňuje extrahovat různé části data z hodnoty data/času. Příklady níže.Rok, měsíc a den
DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';VYBERTE {fn EXTRACT(YEAR FROM @date)} JAKO 'YEAR', {fn EXTRACT(MONTH FROM @date)} JAKO 'MONTH ', {fn EXTRACT(DAY FROM @date)} JAKO 'DAY';Výsledek:
+--------+---------+-------+| ROK | MĚSÍC | DEN ||--------+---------+-------|| 2000 | 2 | 14 |+--------+---------+-------+Hodiny, minuty a sekundy
DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';VYBERTE {fn EXTRACT(HOUR FROM @date)} JAKO 'HOUR', {fn EXTRACT(MINUTE FROM @date)} JAKO 'MINUTE ', {fn EXTRACT(SECOND FROM @date)} JAKO 'SECOND';Výsledek:
+--------+----------+----------+| HODINA | MINUTA | DRUHÝ ||--------+----------+----------|| 7 | 31 | 58 |+--------+----------+----------+Příklad 8 – Funkce TIMESTAMPADD()
TIMESTAMPADD()
umožňuje přidat zadané číslo zadaného intervalu (část data/času) k hodnotě data/času. Tato funkce přijímá tři argumenty; interval (část data/času), který se má přidat (např. měsíc), počet této části, která se má přidat, a hodnota data. Příklady níže.Rok, čtvrtletí, měsíc a den
DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';SELECT {fn TIMESTAMPADD(SQL_TSI_YEAR, 21, @date)} AS 'SQL_TSI_YEAR', {fn TIMESTAMPADD,SQL21)_QUARTER,datum,2TSI)_ } JAKO 'SQL_TSI_QUARTER', {fn TIMESTAMPADD(SQL_TSI_MONTH, 21, @date)} JAKO 'SQL_TSI_MONTH', {fn TIMESTAMPADD(SQL_TSI_DAY, 21, @date)} JAKO 'SQL_TSI_DAY';Výsledek:
SQL_TSI_YEAR | 2021-02-14 07:31:58.1234567SQL_TSI_QUARTER | 2005-05-14 07:31:58.1234567SQL_TSI_MONTH | 2001-11-14 07:31:58.1234567SQL_TSI_DAY | 2000-03-06 07:31:58.1234567Hodiny, minuty a sekundy
DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';SELECT {fn TIMESTAMPADD(SQL_TSI_HOUR, 5, @date)} JAKO 'SQL_TSI @HOUR', {fn TIMESTAMPADD(TIMESTAMPADD(date SQL_TSI,5_) } JAKO 'SQL_TSI_MINUTE', {fn TIMESTAMPADD(SQL_TSI_SECOND, 5, @date)} JAKO 'SQL_TSI_SECOND', {fn TIMESTAMPADD(SQL_TSI_FRAC_SECOND, 5, @date)} JAKO 'SQL_TSI_FRAC_SECOND';Výsledek:
SQL_TSI_HOUR | 2000-02-14 12:31:58.1234567SQL_TSI_MINUTE | 2000-02-14 07:36:58.1234567SQL_TSI_SECOND | 2000-02-14 07:32:03.1234567SQL_TSI_FRAC_SECOND | 2000-02-14 07:31:58.1284567Příklad 9 – Funkce TIMESTAMPDIFF()
TIMESTAMPDIFF()
funkce vrací rozdíl mezi dvěma hodnotami data/času. Tato funkce přijímá tři argumenty; interval (část data/času), pro který se má vypočítat rozdíl (např. měsíc), první datum a druhé datum. Funkce vrací počet intervalů, o které je první datum větší než druhé datum Příklady níže.Rok, čtvrtletí, měsíc, týden a den
DECLARE @date1 datetime2 ='2000-02-14 07:31:58.1234567'; DECLARE @date2 datetime2 =DATEADD(rok, 1, @date1);SELECT {fn TIMESTAMPDIFF(SQL_TSI_YEAR, @date1, @date2)} JAKO 'SQL_TSI_YEAR', {fn TIMESTAMPDIFF(SQL_TSI_QUARTER, @date1, @date2)} JAKO 'SQL_TSI ', {fn TIMESTAMPDIFF(SQL_TSI_MONTH, @datum1, @datum2)} JAKO 'SQL_TSI_MONTH', {fn TIMESTAMPDIFF(SQL_TSI_WEEK, @datum1, @datum2)} JAKO 'SQL_TSI_WEEK', {fn TIMESTAMPDIFF(SQL2_TSI_DAY) } AS 'SQL_TSI_DAY';Výsledek:
+----------------+-------------------+---------- --------+----------------+---------------+| SQL_TSI_YEAR | SQL_TSI_QUARTER | SQL_TSI_MONTH | SQL_TSI_WEEK | SQL_TSI_DAY ||----------------+-------------------+---------- -------+----------------+---------------|| 1 | 4 | 12 | 52 | 366 |+----------------+-------------------+---------- -------+----------------+---------------+Hodiny, minuty a sekundy
DECLARE @date1 datetime2 ='2000-02-14 07:31:58.1234567'; DECLARE @date2 datetime2 =DATEADD(den, 1, @date1);SELECT {fn TIMESTAMPDIFF(SQL_TSI_HOUR, @date1, @date2)} JAKO 'SQL_TSI_HOUR', {fn TIMESTAMPDIFF(SQL_TSI_MINUTE, @date1, @date2)} JAKO 'MINUTESQL_ ', {fn TIMESTAMPDIFF(SQL_TSI_SECOND, @date1, @date2)} JAKO 'SQL_TSI_SECOND', {fn TIMESTAMPDIFF(SQL_TSI_FRAC_SECOND, @date1, @date2)} JAKO 'SQL_TSI_FRAC_SECOND';Výsledek:
+----------------+------------------+----------- --------+-----------------------+| SQL_TSI_HOUR | SQL_TSI_MINUTE | SQL_TSI_SECOND | SQL_TSI_FRAC_SECOND ||----------------+------------------+------------ -------+-----------------------|| 24 | 1440 | 86400 | 86400000 |+----------------+------------------+----------- -------+-----------------------+