sql >> Databáze >  >> RDS >> Sqlserver

Skalární funkce ODBC pro datum a čas na serveru SQL (příklady T-SQL)

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.1234567

Hodiny, 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.1284567

Pří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 |+----------------+------------------+----------- -------+-----------------------+


  1. ORA-21700:objekt neexistuje nebo je označen k odstranění pro Asociativní pole jako vstupní parametr volaný z ODP.NET

  2. Produkt Microsoft Office, který odmítá zemřít

  3. Jak mohu zapsat hodnoty SQLite Real do hodnot Java BigDecimal?

  4. Příklady TIMESTAMP() – MySQL