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

3 начина да получите първия ден от месеца в SQL Server

По-долу са три опции за използване на T-SQL за връщане на първия ден от месеца в SQL Server.

Това може да бъде първият ден от текущия месец или първият ден от месеца въз основа на дадена дата.

Опция 1

Един от начините да го направите е така:

DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(dd, -( DAY( @date ) -1 ), @date);

Резултат:

2035-10-01

Това включва използването на някои T-SQL функции за извършване на изместване на датата, за да се върне датата обратно в началото на месеца.

За повече информация относно DATEADD() и DAY() функции, вижте DATEADD() Примери в SQL Server и DAY() Примери в SQL Server.

Опция 2

Ето още една опция за получаване на първия ден от месеца:

DECLARE @date date;
SET @date = '2035-10-15';
SELECT DATEADD(month, DATEDIFF(month, 0, @date), 0);

Резултат:

2035-10-01 00:00:00.000

Тук включихме DATEDIFF() функция в нашето изчисление.

Въпреки че декларирахме първоначалната променлива като date стойност, резултатът е datetime стойност. Можем да използваме CONVERT() или CAST() за да конвертирате резултата в date стойност:

DECLARE @date date;
SET @date = '2035-10-15';
SELECT CAST(DATEADD(month, DATEDIFF(month, 0, @date), 0) AS date);

Резултат:

2035-10-01

Опция 3

Ето още една опция:

DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;

Резултат:

2035-10-01 00:00:00.000

Подобно на опция 2, резултатът е datetime стойност, но този път е така, защото сме декларирали променливата като datetime стойност. Въпреки това можем да му приложим същото третиране, за да го преобразуваме в date стойност:

DECLARE @date datetime;
SET @date = '2035-10-15';
SELECT CAST(@date - DAY( @date ) + 1 AS date);

Резултат:

2035-10-01

Причината, поради която не сме декларирали променливата като date стойност е, защото това би довело до грешка:

DECLARE @date date;
SET @date = '2035-10-15';
SELECT @date - DAY( @date ) + 1;

Резултат:

Msg 206, Level 16, State 2, Line 3
Operand type clash: date is incompatible with int

Това е така, защото се опитваме да добавим цяло число към date стойност, която не работи. Въпреки това добавянето на цяло число към datetime value работи и затова декларирахме променливата като datetime .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Има ли значение редът на колоните в клауза WHERE?

  2. SQL сървърът избира отделни редове, използвайки само най-новата стойност

  3. Как да намерите името на ограничение в SQL Server

  4. SQL Server 2008 Spatial:намерете точка в многоъгълник

  5. Нуждаете се от помощ при изчисляване с помощта на два набора от данни, използващи Expression SSRS