Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

ODBC скаларни функции за дата и час в SQL Server (T-SQL примери)

Можете да използвате 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 |+----------------+----------------+---------- -------+-----------------------+


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преобразуване на DateTime във формат YYYY-MM-DD в SQL Server

  2. Ето три причини, поради които може да видите пикова активност във вашия SQL екземпляр

  3. Какво представлява SQL Server Management Studio (SSMS)?

  4. Какво представлява ограничението на първичния ключ в базата данни на SQL Server - SQL Server / T-SQL урок, част 54

  5. Заявка, която връща йерархичен списък с типове тригерни събития в SQL Server