Можете да използвате ODBC скаларни функции, когато изпълнявате T-SQL изрази в SQL Server. Има различни типове скаларни функции на ODBC, включително низови функции, числови функции, системни функции и, разбира се, функции за дата/час (наричани още функции за дата, час и интервал).
По-долу са дадени примери за функциите за дата, час и интервал, които можете да използвате в SQL Server.
Синтаксис
Първо, ето синтаксиса, който трябва да използвате всеки път, когато извикате ODBC скаларна функция:
ИЗБЕРЕТЕ {fn <име_функция> [ (<аргумент>,....n) ] }
Където <function_name>
е името на функцията и (<argument>,....n)
е произволен брой незадължителни аргументи.
Така че основното нещо, което трябва да запомните, е, че когато извиквате скаларна функция ODBC, трябва да затворите извикването на функцията в къдрави скоби ({}
) и добавете префикс към името с fn
.
Пример 1 – СЕГА()
Тази функция връща текущата дата и час като стойност на времеви печат.
ИЗБЕРЕТЕ {fn СЕГА()} КАТО резултат;
Резултат:
+------------------------+| Резултат ||-----------------------|| 2018-06-13 21:52:25,667 |+-------------------------+
Пример 2 – клеймо за дата, дата и час
CURRENT_TIMESTAMP()
функцията връща текущата местна дата и местно време като стойност на времеви печат. Можете също да използвате CURRENT_DATE()
за връщане само на частта от датата и/или CURRENT_TIME()
за да върнете само частта от времето.
ИЗБЕРЕТЕ {fn CURRENT_TIMESTAMP()} КАТО „Дата и час“, {fn CURRENT_DATE()} КАТО „Дата“, {fn CURRENT_TIME()} КАТО „Час“;
Резултат:
+------------------------+-----------+------- -------+| Дата и час | Дата | Време ||------------------------------+------------+-------- ------|| 2018-06-13 21:57:29.197 | 2018-06-13 | 21:57:29.197 |+------------------------+-----------+---- ----------+
Също така, CURRENT_TIMESTAMP()
и CURRENT_TIME()
и двете приемат незадължителен аргумент, за да определят секундната точност на върнатата стойност.
Примери:
ИЗБЕРЕТЕ {fn CURRENT_TIMESTAMP(3)} КАТО 'Дата и час', {fn CURRENT_TIME(6)} КАТО 'Час';
Резултат:
+-------------------+----------------+| Дата и час | Време ||-----------------------+----------------|| 2018-06-13 22:00:59.263 | 22:00:59.263000 |+---------------------------------+----------------- +
В този пример CURRENT_TIMESTAMP()
връща секунди с точност от 3, докато CURRENT_TIME()
връща секунди с точност от 6.
Пример 3 – CURDATE() и CURTIME()
Можете да използвате CURDATE()
и/или CURTIME()
като алтернатива на горните функции за дата и час:
ИЗБЕРЕТЕ {fn CURDATE()} КАТО 'Дата', {fn CURTIME()} КАТО 'Час';
Резултат:
+-----------+--------------+| Дата | Време ||-----------+--------------|| 2018-06-13 | 22:05:20.013 |+-----------+--------------+
Имайте предвид, че тези аргументи не приемат никакви аргументи, така че ако трябва да посочите точността на секундите, използвайте CURRENT_DATE()
и/или CURRENT_TIME()
вместо това.
Пример 4 – Дни и седмици
Има куп ODBC скаларни функции за връщане на определени части от стойност на дата. Тези функции приемат аргумент, който е изразът за дата, от който да извлечете желаната част от датата.
Ето различните функции за връщане на дните и седмиците от датата:
DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';ИЗБЕРЕТЕ {fn DAYNAME(@date)} КАТО 'DAYNAME', {fn DAYOFYEAR(@date)} КАТО 'DAYOFYEAR', {fn DAYOFMONTH(@date)} КАТО 'DAYOFMONTH', {fn DAYOFWEEK(@date)} КАТО 'DAYOFWEEK', {fn WEEK(@date)} КАТО 'СЕДМИЦА';
Резултат:
+-----------+------------+--------------+----- --------+-------+| ИМЕ НА ДЕН | ДЕН ГОДИНА | ДЕН МЕСЕЦ | ДЕН СЕДМИЦА | СЕДМИЦА ||----------+------------+--------------+------ -------+--------|| понеделник | 45 | 14 | 2 | 8 |+-----------+------------+--------------+------ -------+-------+
В този случай ние присвоихме дата на променлива, след което предадохме тази променлива на всяка функция. След това функцията върна съответната част от датата.
Пример 5 – месеци, тримесечия и години
Ето различните функции за връщане на частта от месеци, тримесечия и години от стойността за дата/час:
DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';ИЗБЕРЕТЕ {fn ГОДИНА(@date)} КАТО 'ГОДИНА', {fn MONTH(@date)} КАТО 'МЕСЦ', {fn MONTHNAME(@date)} КАТО 'MONTHNAME', {fn QUARTER(@date)} КАТО 'QUARTER';
Резултат:
+--------+--------+------------+-----------+| ГОДИНА | МЕСЕЦ | MONTHNAME | КВАРТАЛ ||--------+--------+------------+-----------|| 2000 | 2 | февруари | 1 |+--------+--------+------------+-----------+предварително>Пример 6 – Часове, минути и секунди
Ето различните функции за връщане на частта от часовете, минутите и секундите от стойността на датата/часа:
DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';ИЗБЕРЕТЕ {fn HOUR(@date)} КАТО 'ЧАС', {fn МИНУТА(@date)} КАТО 'МИНУТА', {fn SECOND(@date)} КАТО 'SECOND';Резултат:
<пред>+--------+----------+---------+| ЧАС | МИНУТА | ВТОРИ ||--------+----------+---------|| 7 | 31 | 58 |+--------+----------+---------+
Пример 7 – Функцията EXTRACT()
Има и ODBC скаларна функция, наречена EXTRACT()
, което ви позволява да извличате различните части от датата от стойността за дата/час. Примери по-долу.
Година, месец и ден
DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';ИЗБЕРЕТЕ {fn EXTRACT(YEAR FROM @date)} КАТО 'ГОДИНА', {fn EXTRACT(MONTH FROM @date)} КАТО 'МЕСЕЦ ', {fn EXTRACT(DAY FROM @date)} КАТО 'ДЕН';
Резултат:
<пред>+--------+--------+-------+| ГОДИНА | МЕСЕЦ | ДЕН ||--------+--------+-------|| 2000 | 2 | 14 |+--------+--------+-------+Часове, минути и секунди
DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';ИЗБЕРЕТЕ {fn EXTRACT(HOUR FROM @date)} КАТО 'ЧАС', {fn EXTRACT(MINUTE FROM @date)} КАТО 'МИНУТА ', {fn EXTRACT(SECOND FROM @date)} КАТО 'SECOND';
Резултат:
<пред>+--------+----------+---------+| ЧАС | МИНУТА | ВТОРИ ||--------+----------+---------|| 7 | 31 | 58 |+--------+----------+---------+Пример 8 – Функцията TIMESTAMPADD()
TIMESTAMPADD()
ви позволява да добавите определен номер от посочения интервал (част за дата/час) към стойността за дата/час. Тази функция приема три аргумента; интервалът (част за дата/час), който трябва да се добави (например месец), номерът на тази част за добавяне и стойността на датата. Примери по-долу.
Година, тримесечие, месец и ден
DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';ИЗБЕРЕТЕ {fn TIMESTAMPADD(SQL_TSI_YEAR, 21, @date)} КАТО 'SQL_TSI_YEAR', {fn(fn) TIMESTAMPADD (SQL_TSI_YEAR, 21, @date)} КАТО 'SQL_TSI_YEAR', {fn (da, TIMESTAMPAD) } КАТО 'SQL_TSI_QUARTER', {fn TIMESTAMPADD(SQL_TSI_MONTH, 21, @date)} КАТО 'SQL_TSI_MONTH', {fn TIMESTAMPADD(SQL_TSI_DAY, 21, @date)} КАТО 'SQL_TSI_DAY';Резултат:
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Часове, минути и секунди
DECLARE @date datetime2 ='2000-02-14 07:31:58.1234567';ИЗБЕРЕТЕ {fn TIMESTAMPADD(SQL_TSI_HOUR, 5, @date)} КАТО 'SQL_TSI_HOUR', {fn TIMESTAMPADD,5 date_date) } КАТО 'SQL_TSI_MINUTE', {fn TIMESTAMPADD(SQL_TSI_SECOND, 5, @date)} КАТО 'SQL_TSI_SECOND', {fn TIMESTAMPADD(SQL_TSI_FRAC_SECOND, 5, @date)} ASTSI';Резултат:
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Пример 9 – Функцията TIMESTAMPDIFF()
TIMESTAMPDIFF()
функцията връща разликата между две стойности за дата/час. Тази функция приема три аргумента; интервалът (част от дата/час), за който да се изчисли разликата (напр. месец), първата дата и втората дата. Функцията връща броя на интервалите, през които първата дата е по-голяма от втората. Примери по-долу.Година, тримесечие, месец, седмица и ден
DECLARE @date1 datetime2 ='2000-02-14 07:31:58.1234567'; ДЕКЛАРИРАЙТЕ @date2 datetime2 =DATEADD(година, 1, @date1);ИЗБЕРЕТЕ {fn TIMESTAMPDIFF(SQL_TSI_YEAR, @date1, @date2)} КАТО 'SQL_TSI_YEAR', {fn TIMESTAMPDIFF(SQL_TSI_QUARTER, @teSQUARTER, @teSQUARTER, @teSQUARTER, ', {fn TIMESTAMPDIFF(SQL_TSI_MONTH, @date1, @date2)} КАТО 'SQL_TSI_MONTH', {fn TIMESTAMPDIFF(SQL_TSI_WEEK, @date1, @date2)} КАТО 'SQL_TSI_WESQDAL', {date2 date(date) } КАТО 'SQL_TSI_DAY';Резултат:
+----------------+------------------+-------- --------+----------------+--------------+| SQL_TSI_YEAR | SQL_TSI_QUARTER | SQL_TSI_MONTH | SQL_TSI_WEEK | SQL_TSI_DAY ||----------------+------------------+---------- -------+----------------+--------------|| 1 | 4 | 12 | 52 | 366 |+----------------+-------------------+--------- -------+----------------+--------------+Часове, минути и секунди
DECLARE @date1 datetime2 ='2000-02-14 07:31:58.1234567'; ДЕКЛАРИРАЙТЕ @date2 datetime2 =DATEADD(ден, 1, @date1);ИЗБЕРЕТЕ {fn TIMESTAMPDIFF(SQL_TSI_HOUR, @date1, @date2)} КАТО 'SQL_TSI_HOUR', {fn TIMESTAMPDIFF(SQL_TSI_MINUTE), да' @da_TSI_MINUTE, @da_TSI_MINUTE, да' ', {fn TIMESTAMPDIFF(SQL_TSI_SECOND, @date1, @date2)} КАТО 'SQL_TSI_SECOND', {fn TIMESTAMPDIFF(SQL_TSI_FRAC_SECOND, @date1, @date2)} КАТО 'SQL_prethodno> Резултат:+----------------+----------------+---------- --------+-----------------------+| SQL_TSI_HOUR | SQL_TSI_MINUTE | SQL_TSI_SECOND | SQL_TSI_FRAC_SECOND ||----------------+-----------------+----------- -------+-----------------------|| 24 | 1440 | 86400 | 86400000 |+----------------+----------------+---------- -------+-----------------------+