Please refer to the articles of this series given below,

As we know, time is precious in our life, so I am thinking of posting some queries on time and date.
If you find any query other than this set, please post/mail them as well.
  1. –Execute the following T - SQL scripts in Microsoft SQL Server Manangement –Studio Query Editor to demonstrate T - SQL convert
  2. and cast functions in transforming –string date,
  3. string time & string datetime data to datetime data type.T - SQL date / datetime functions — SQL Server string to date / datetime conversion – datetime string format sql server — MSSQL string to datetime conversion – convert char to date – convert varchar to date — Subtract 100
  4. from
  5. style number (format) for yy instead yyyy (
  6. or ccyy with century
  7. )
  8. SELECT
  9. convert(
  10. datetime, ‘Oct 23 2012 11 : 01AM’,
  11. 100
  12. ) — mon dd yyyy hh : mmAM (
  13. or PM
  14. )
  15. SELECT
  16. convert(
  17. datetime, ‘Oct 23 2012 11 : 01AM’
  18. ) — 2012 - 10 - 23 11 : 01 : 00.000 — Without century (yy) string date conversion – convert string to datetime function
  19. SELECT
  20. convert(
  21. datetime, ‘Oct 23 12 11 : 01AM’, 0
  22. ) — mon dd yy hh : mmAM (
  23. or PM
  24. )
  25. SELECT
  26. convert(datetime, ‘Oct 23 12 11 : 01AM’) — 2012 - 10 - 23 11 : 01 : 00.000 — Convert string to datetime sql – convert string to date sql – sql dates format — T - SQL convert string to datetime – SQL Server convert string to date
  27. SELECT
  28. convert(datetime, ’10 / 23 / 2016′, 101) — mm / dd / yyyy
  29. SELECT
  30. convert(datetime, ‘2016.10.23’, 102) — yyyy.mm.dd
  31. SELECT
  32. convert(datetime, ’23 / 10 / 2016′, 103) — dd / mm / yyyy
  33. SELECT
  34. convert(datetime, ‘23.10.2016’, 104) — dd.mm.yyyy
  35. SELECT
  36. convert(datetime, ’23 - 10 - 2016′, 105) — dd - mm - yyyy — mon types are nondeterministic conversions,
  37. dependent on language setting
  38. SELECT
  39. convert(datetime, ’23 OCT 2016′, 106) — dd mon yyyy
  40. SELECT
  41. convert(datetime, ‘Oct 23, 2016’, 107) — mon dd,
  42. yyyy — 2016 - 10 - 23 00 : 00 : 00.000
  43. SELECT
  44. convert(datetime, ’20 : 10 : 44′, 108) — hh : mm : ss — 1900 - 01 - 01 20 : 10 : 44.000 — mon dd yyyy hh : mm : ss : mmmAM (
  45. or PM
  46. ) – sql time format – SQL Server datetime format
  47. SELECT
  48. convert(
  49. datetime, ‘Oct 23 2016 11 : 02 : 44 : 013AM’,
  50. 109
  51. ) — 2016 - 10 - 23 11 : 02 : 44.013
  52. SELECT
  53. convert(datetime, ’10 - 23 - 2016′, 110) — mm - dd - yyyy
  54. SELECT
  55. convert(datetime, ‘2016 / 10 / 23’, 111) — yyyy / mm / dd — YYYYMMDD ISO date format works at any language setting – international standard
  56. SELECT
  57. convert(datetime, ‘20161023’)
  58. SELECT
  59. convert(datetime, ‘20161023’, 112) — yyyymmdd — 2016 - 10 - 23 00 : 00 : 00.000
  60. SELECT
  61. convert(
  62. datetime, ’23 Oct 2016 11 : 02 : 07 : 577′,
  63. 113
  64. ) — dd mon yyyy hh : mm : ss : mmm — 2016 - 10 - 23 11 : 02 : 07.577
  65. SELECT
  66. convert(
  67. datetime, ’20 : 10 : 25 : 300′, 114
  68. ) — hh : mm : ss : mmm(24h) — 1900 - 01 - 01 20 : 10 : 25.300
  69. SELECT
  70. convert(
  71. datetime, ‘2016 - 10 - 23 20 : 44 : 11’,
  72. 120
  73. ) — yyyy - mm - dd hh : mm : ss(24h) — 2016 - 10 - 23 20 : 44 : 11.000
  74. SELECT
  75. convert(
  76. datetime, ‘2016 - 10 - 23 20 : 44 : 11.500’,
  77. 121
  78. ) — yyyy - mm - dd hh : mm : ss.mmm — 2016 - 10 - 23 20 : 44 : 11.500 — Style 126 is ISO 8601 format : international standard – works with any language setting
  79. SELECT
  80. convert(
  81. datetime, ‘2008 - 10 - 23T18 : 52 : 47.513’,
  82. 126
  83. ) — yyyy - mm - ddThh : mm : ss(.mmm) — 2008 - 10 - 23 18 : 52 : 47.513 — Convert DDMMYYYY format to datetime – sql server to date / datetime
  84. SELECT
  85. convert(
  86. datetime,
  87. STUFF(
  88. STUFF(‘31012016′, 3, 0, ’ - ‘),
  89. 6,
  90. 0,
  91. ’ - ‘
  92. ),
  93. 105
  94. ) — 2016 - 01 - 31 00 : 00 : 00.000 — SQL Server T - SQL string to datetime conversion without century – some exceptions — nondeterministic means language setting dependent such as Mar / Mär / mars / márc
  95. SELECT
  96. convert(
  97. datetime, ‘Oct 23 16 11 : 02 : 44AM’
  98. ) — Default
  99. SELECT
  100. convert(datetime, ’10 / 23 / 16′, 1) — mm / dd / yy U.S.
  101. SELECT
  102. convert(datetime, ‘16.10.23’, 2) — yy.mm.dd ANSI
  103. SELECT
  104. convert(datetime, ’23 / 10 / 16′, 3) — dd / mm / yy UK / FR
  105. SELECT
  106. convert(datetime, ‘23.10.16’, 4) — dd.mm.yy German
  107. SELECT
  108. convert(datetime, ’23 - 10 - 16′, 5) — dd - mm - yy Italian
  109. SELECT
  110. convert(datetime, ’23 OCT 16′, 6) — dd mon yy non - det.
  111. SELECT
  112. convert(datetime, ‘Oct 23, 16’, 7) — mon dd,
  113. yy non - det.
  114. SELECT
  115. convert(datetime, ’20 : 10 : 44′, 8) — hh : mm : ss
  116. SELECT
  117. convert(
  118. datetime, ‘Oct 23 16 11 : 02 : 44 : 013AM’,
  119. 9
  120. ) — Default with msec
  121. SELECT
  122. convert(datetime, ’10 - 23 - 16′, 10) — mm - dd - yy U.S.
  123. SELECT
  124. convert(datetime, ’16 / 10 / 23′, 11) — yy / mm / dd Japan
  125. SELECT
  126. convert(datetime, ‘161023’, 12) — yymmdd ISO
  127. SELECT
  128. convert(
  129. datetime, ’23 Oct 16 11 : 02 : 07 : 577′,
  130. 13
  131. ) — dd mon yy hh : mm : ss : mmm EU dflt
  132. SELECT
  133. convert(datetime, ’20 : 10 : 25 : 300′, 14) — hh : mm : ss : mmm(24h)
  134. SELECT
  135. convert(
  136. datetime, ‘2016 - 10 - 23 20 : 44 : 11’,
  137. 20
  138. ) — yyyy - mm - dd hh : mm : ss(24h) ODBC can.
  139. SELECT
  140. convert(
  141. datetime, ‘2016 - 10 - 23 20 : 44 : 11.500’,
  142. 21
  143. ) – yyyy - mm - dd hh : mm : ss.mmm ODBC ———— — SQL Datetime Data Type : Combine date & time string into datetime – sql hh mm ss — String to datetime – mssql datetime – sql convert date – sql concatenate string DECLARE @DateTimeValue varchar(32),
  144. @DateValue char(8),
  145. @TimeValue char(6)
  146. SELECT
  147. @DateValue = ‘20120718’,
  148. @TimeValue = ‘211920’
  149. SELECT
  150. @DateTimeValue = convert(
  151. varchar,
  152. convert(datetime, @DateValue),
  153. 111
  154. ) + ‘ ‘ + substring(@TimeValue, 1, 2) + ‘ : ’ + substring(@TimeValue, 3, 2) + ‘ : ’ + substring(@TimeValue, 5, 2)
  155. SELECT
  156. DateInput = @DateValue,
  157. TimeInput = @TimeValue,
  158. DateTimeOutput = @DateTimeValue;
  159. /*
  160. DateInput TimeInput DateTimeOutput
  161. 20120718 211920 2012/07/18 21:19:20 */
  162. /* Datetime 8 bytes internal storage structure
  163. o 1st 4 bytes: number of days after the base date 1900-01-01
  164. o 2nd 4 bytes: number of clock-ticks (3.33 milliseconds) since midnight
  165. Smalldatetime 4 bytes internal storage structure
  166. o 1st 2 bytes: number of days after the base date 1900-01-01
  167. o 2nd 2 bytes: number of minutes since midnight
  168. SELECT CONVERT(binary(8), getdate()) — 0x00009E4D 00C01272
  169. SELECT CONVERT(binary(4), convert(smalldatetime,getdate())) — 0x9E4D 02BC
  170. */
  171. — SQL convert seconds to HH : MM : SS – sql times format – sql hh mm DECLARE @Seconds INT
  172. SET
  173. @Seconds = 20000
  174. SELECT
  175. HH = @Seconds / 3600,
  176. MM = (@Seconds % 3600) / 60,
  177. SS = (@Seconds % 60)
  178. /* HH MM SS
  179. 5 33 20 */
  180. ———— — SQL Server Date Only
  181. from
  182. DATETIME column – get date only — T - SQL just date – truncate time
  183. from
  184. datetime – remove time part ———— DECLARE @Now datetime = CURRENT_TIMESTAMP — getdate()
  185. SELECT
  186. DateAndTime = @Now — Date portion
  187. and Time portion,
  188. DateString = REPLACE(
  189. LEFT(
  190. CONVERT (varchar, @Now, 112),
  191. 10
  192. ),
  193. ’ ‘,
  194. ’ - ‘
  195. ),
  196. [Date] = CONVERT(DATE, @Now) — SQL Server 2008
  197. and on – date part,
  198. Midnight1 = dateadd(
  199. day,
  200. datediff(day, 0, @Now),
  201. 0
  202. ),
  203. Midnight2 = CONVERT(
  204. DATETIME,
  205. CONVERT(int, @Now)
  206. ),
  207. Midnight3 = CONVERT(
  208. DATETIME,
  209. CONVERT(BIGINT, @Now) & (
  210. POWER(
  211. Convert(bigint, 2),
  212. 32
  213. )-1
  214. )
  215. )
  216. /* DateAndTime DateString Date Midnight1 Midnight2 Midnight3
  217. 2010-11-02 08:00:33.657 20101102 2010-11-02 2010-11-02 00:00:00.000 2010-11-02 00:00:00.000 2010-11-02 00:00:00.000 */
  218. ———— — SQL Server 2008 convert datetime to date – sql yyyy mm dd
  219. SELECT
  220. TOP (3) OrderDate = CONVERT(date, OrderDate),
  221. Today = CONVERT(
  222. date,
  223. getdate()
  224. )
  225. FROM
  226. AdventureWorks2008.Sales.SalesOrderHeader
  227. ORDER BY
  228. newid();
  229. /* OrderDate Today
  230. 2004-02-15 2012-06-18 …..*/
  231. ———— — SQL date yyyy mm dd – sqlserver yyyy mm dd – date format yyyymmdd
  232. SELECT
  233. CONVERT(
  234. VARCHAR(10),
  235. GETDATE(),
  236. 111
  237. ) AS [YYYY / MM / DD]
  238. /* YYYY/MM/DD
  239. 2015/07/11 */
  240. SELECT
  241. CONVERT(
  242. VARCHAR(10),
  243. GETDATE(),
  244. 112
  245. ) AS [YYYYMMDD]
  246. /* YYYYMMDD
  247. 20150711 */
  248. SELECT
  249. REPLACE(
  250. CONVERT(
  251. VARCHAR(10),
  252. GETDATE(),
  253. 111
  254. ),
  255. ’ / ’,
  256. ’ ‘
  257. ) AS [YYYY MM DD]
  258. /* YYYY MM DD
  259. 2015 07 11 */
  260. — Converting to special (non - standard) date fomats : DD - MMM - YY
  261. SELECT
  262. UPPER(
  263. REPLACE(
  264. CONVERT(
  265. VARCHAR,
  266. GETDATE(),
  267. 6
  268. ),
  269. ’ ‘,
  270. ’ - ‘
  271. )
  272. ) — 07 - MAR - 14 ———— — SQL convert date string to datetime – time
  273. set
  274. to 00 : 00 : 00.000
  275. or 12 : 00AM PRINT CONVERT(datetime, ’07 - 10 - 2012′, 110) — Jul 10 2012 12 : 00AM PRINT CONVERT(datetime, ’2012 / 07 / 10′, 111) — Jul 10 2012 12 : 00AM PRINT CONVERT(datetime, ’20120710′, 112) — Jul 10 2012 12 : 00AM ———— — String to date conversion – sql date yyyy mm dd – sql date formatting — SQL Server cast string to date – sql convert date to datetime
  276. SELECT
  277. [Date] = CAST (@DateValue AS datetime) — 2012 - 07 - 18 00 : 00 : 00.000 — SQL convert string date to different style – sql date string formatting
  278. SELECT
  279. CONVERT(
  280. varchar,
  281. CONVERT(datetime, ‘20140508’),
  282. 100
  283. ) — May 8 2014 12 : 00AM — SQL Server convert date to integer DECLARE @Date datetime;
  284. SET
  285. @Date = getdate();
  286. SELECT
  287. DateAsInteger = CAST (
  288. CONVERT(varchar, @Date, 112) as INT
  289. );
  290. — Result : 20161225 — SQL Server convert integer to datetime DECLARE @iDate int
  291. SET
  292. @iDate = 20151225
  293. SELECT
  294. IntegerToDatetime = CAST(
  295. convert(varchar, @iDate) as datetime
  296. ) — 2015 - 12 - 25 00 : 00 : 00.000 — Alternates : date - only datetime
  297. values
  298. — SQL Server floor date – sql convert datetime
  299. SELECT
  300. [DATE - ONLY] = CONVERT(
  301. DATETIME,
  302. FLOOR(
  303. CONVERT(
  304. FLOAT,
  305. GETDATE()
  306. )
  307. )
  308. )
  309. SELECT
  310. [DATE - ONLY] = CONVERT(
  311. DATETIME,
  312. FLOOR(
  313. CONVERT(
  314. MONEY,
  315. GETDATE()
  316. )
  317. )
  318. ) — SQL Server cast string to datetime — SQL Server datetime to string convert
  319. SELECT
  320. [DATE - ONLY] = CAST(
  321. CONVERT(
  322. varchar,
  323. GETDATE(),
  324. 101
  325. ) AS DATETIME
  326. ) — SQL Server dateadd function – T - SQL datediff function — SQL strip time
  327. from
  328. date – MSSQL strip time
  329. from
  330. datetime
  331. SELECT
  332. getdate(),
  333. dateadd(
  334. dd,
  335. datediff(
  336. dd,
  337. 0,
  338. getdate()
  339. ),
  340. 0
  341. ) — Results : 2016 - 01 - 23 05 : 35 : 52.793 2016 - 01 - 23 00 : 00 : 00.000 — String date – 10 bytes of storage
  342. SELECT
  343. [STRING DATE] = CONVERT(
  344. varchar,
  345. GETDATE(),
  346. 110
  347. )
  348. SELECT
  349. [STRING DATE] = CONVERT(varchar, CURRENT_TIMESTAMP, 110) — Same results : 01 - 02 - 2012 — SQL Server cast datetime as string – sql datetime formatting
  350. SELECT
  351. stringDateTime = CAST (
  352. getdate() as varchar
  353. ) — Dec 29 2012 3 : 47AM ——— - — SQL date range BETWEEN operator ——— - — SQL date range
  354. select
  355. – date range search – T - SQL date range query — Count Sales Orders for 2003 OCT - NOV DECLARE @StartDate DATETIME,
  356. @EndDate DATETIME
  357. SET
  358. @StartDate = convert(DATETIME, ’10 / 01 / 2003′, 101)
  359. SET
  360. @EndDate = convert(DATETIME, ’11 / 30 / 2003′, 101)
  361. SELECT
  362. @StartDate,
  363. @EndDate — 2003 - 10 - 01 00 : 00 : 00.000 2003 - 11 - 30 00 : 00 : 00.000
  364. SELECT
  365. dateadd(DAY, 1, @EndDate),
  366. dateadd(
  367. ms,
  368. -3,
  369. dateadd(DAY, 1, @EndDate)
  370. ) — 2003 - 12 - 01 00 : 00 : 00.000 2003 - 11 - 30 23 : 59 : 59.997 — MSSQL date range
  371. select
  372. using >=
  373. and <
  374. SELECT
  375. [Sales Orders for 2003 OCT - NOV] = COUNT(*)
  376. FROM
  377. Sales.SalesOrderHeader
  378. WHERE
  379. OrderDate >= @StartDate
  380. AND OrderDate < dateadd(DAY, 1, @EndDate)
  381. /* Sales Orders for 2003 OCT-NOV
  382. 3668 */
  383. — Equivalent date range query using BETWEEN comparison — It requires a bit of trick programming
  384. SELECT
  385. [Sales Orders for 2003 OCT - NOV] = COUNT(*)
  386. FROM
  387. Sales.SalesOrderHeader
  388. WHERE
  389. OrderDate BETWEEN @StartDate
  390. AND dateadd(
  391. ms,
  392. -3,
  393. dateadd(DAY, 1, @EndDate)
  394. ) — 3668 USE AdventureWorks;
  395. — SQL between string dates
  396. SELECT
  397. POs = COUNT(*)
  398. FROM
  399. Purchasing.PurchaseOrderHeader
  400. WHERE
  401. OrderDate BETWEEN ‘20040201’
  402. AND ‘20040210’ — Result : 108 — SQL BETWEEN dates without time – time stripped – time removed – date part only
  403. SELECT
  404. POs = COUNT(*)
  405. FROM
  406. Purchasing.PurchaseOrderHeader
  407. WHERE
  408. datediff(dd, 0, OrderDate) BETWEEN datediff(dd, 0, ’20040201 12 : 11 : 39′)
  409. AND datediff(dd, 0, ’20040210 14 : 33 : 19′) — 108 — BETWEEN is equivalent to >= …AND….<=
  410. SELECT
  411. POs = COUNT(*)
  412. FROM
  413. Purchasing.PurchaseOrderHeader
  414. WHERE
  415. OrderDate BETWEEN ‘2004 - 02 - 01 00 : 00 : 00.000’
  416. AND ‘2004 - 02 - 10 00 : 00 : 00.000’
  417. /* Orders with OrderDates
  418. ‘2004-02-10 00:00:01.000’ – 1 second after midnight (12:00AM)
  419. ‘2004-02-10 00:01:00.000’ – 1 minute after midnight
  420. ‘2004-02-10 01:00:00.000’ – 1 hour after midnight
  421. are not included in the two queries above. */
  422. — To include the entire day of 2004 - 02 - 10 use :
  423. SELECT
  424. POs = COUNT(*)
  425. FROM
  426. Purchasing.PurchaseOrderHeader
  427. WHERE
  428. OrderDate >= ‘20040201’
  429. AND OrderDate < ‘20040211’ ——— - — Calculate week ranges in a year ——— - DECLARE @Year INT = ‘2016’;
  430. WITH cteDays AS (
  431. SELECT
  432. DayOfYear = Dateadd(
  433. dd,
  434. number,
  435. CONVERT(
  436. DATE,
  437. CONVERT(
  438. char(4),
  439. @Year
  440. )+ ’0101′
  441. )
  442. )
  443. FROM
  444. master.dbo.spt_values
  445. WHERE
  446. type = ’P’
  447. ),
  448. CTE AS (
  449. SELECT
  450. DayOfYear,
  451. WeekOfYear = DATEPART(week, DayOfYear)
  452. FROM
  453. cteDays
  454. WHERE
  455. YEAR(DayOfYear)= @YEAR
  456. )
  457. SELECT
  458. WeekOfYear,
  459. StartOfWeek = MIN(DayOfYear),
  460. EndOfWeek = MAX(DayOfYear)
  461. FROM
  462. CTE
  463. GROUP BY
  464. WeekOfYear
  465. ORDER BY
  466. WeekOfYear ———— — Date validation function ISDATE – returns 1
  467. or 0 – SQL datetime functions ———— DECLARE @StringDate varchar(32)
  468. SET
  469. @StringDate = ‘2011 - 03 - 15 18 : 50’ IF EXISTS(
  470. SELECT
  471. *
  472. WHERE
  473. ISDATE(@StringDate) = 1
  474. ) PRINT ‘VALID DATE : ‘ + @StringDate ELSE PRINT ‘INVALID DATE : ‘ + @StringDate GO — Result : VALID DATE : 2011 - 03 - 15 18 : 50 DECLARE @StringDate varchar(32)
  475. SET
  476. @StringDate = ‘20112 - 03 - 15 18 : 50’ IF EXISTS(
  477. SELECT
  478. *
  479. WHERE
  480. ISDATE(@StringDate) = 1
  481. ) PRINT ‘VALID DATE : ‘ + @StringDate ELSE PRINT ‘INVALID DATE : ‘ + @StringDate — Result : INVALID DATE : 20112 - 03 - 15 18 : 50 — First
  482. and last day of date periods – SQL Server 2008
  483. and on code DECLARE @Date DATE = ‘20161023’
  484. SELECT
  485. ReferenceDate = @Date
  486. SELECT
  487. FirstDayOfYear = CONVERT(
  488. DATE,
  489. dateadd(
  490. yy,
  491. datediff(yy, 0, @Date),
  492. 0
  493. )
  494. )
  495. SELECT
  496. LastDayOfYear = CONVERT(
  497. DATE,
  498. dateadd(
  499. yy,
  500. datediff(yy, 0, @Date)+ 1,
  501. -1
  502. )
  503. )
  504. SELECT
  505. FDofSemester = CONVERT(
  506. DATE,
  507. dateadd(
  508. qq,
  509. (
  510. (
  511. datediff(qq, 0, @Date)/ 2
  512. )* 2
  513. ),
  514. 0
  515. )
  516. )
  517. SELECT
  518. LastDayOfSemester = CONVERT(
  519. DATE,
  520. dateadd(
  521. qq,
  522. (
  523. (
  524. datediff(qq, 0, @Date)/ 2
  525. )* 2
  526. )+ 2,
  527. -1
  528. )
  529. )
  530. SELECT
  531. FirstDayOfQuarter = CONVERT(
  532. DATE,
  533. dateadd(
  534. qq,
  535. datediff(qq, 0, @Date),
  536. 0
  537. )
  538. ) — 2016 - 10 - 01
  539. SELECT
  540. LastDayOfQuarter = CONVERT(
  541. DATE,
  542. dateadd(
  543. qq,
  544. datediff(qq, 0, @Date)+ 1,
  545. -1
  546. )
  547. ) — 2016 - 12 - 31
  548. SELECT
  549. FirstDayOfMonth = CONVERT(
  550. DATE,
  551. dateadd(
  552. mm,
  553. datediff(mm, 0, @Date),
  554. 0
  555. )
  556. )
  557. SELECT
  558. LastDayOfMonth = CONVERT(
  559. DATE,
  560. dateadd(
  561. mm,
  562. datediff(mm, 0, @Date)+ 1,
  563. -1
  564. )
  565. )
  566. SELECT
  567. FirstDayOfWeek = CONVERT(
  568. DATE,
  569. dateadd(
  570. wk,
  571. datediff(wk, 0, @Date),
  572. 0
  573. )
  574. )
  575. SELECT
  576. LastDayOfWeek = CONVERT(
  577. DATE,
  578. dateadd(
  579. wk,
  580. datediff(wk, 0, @Date)+ 1,
  581. -1
  582. )
  583. ) — 2016 - 10 - 30 — Month sequence generator – sequential numbers / dates DECLARE @Date date = ‘2000 - 01 - 01’
  584. SELECT
  585. MonthStart = dateadd(MM, number, @Date)
  586. FROM
  587. master.dbo.spt_values
  588. WHERE
  589. type = ’P’
  590. AND dateadd(MM, number, @Date) <= CURRENT_TIMESTAMP
  591. ORDER BY
  592. MonthStart
  593. /* MonthStart
  594. 2000-01-01
  595. 2000-02-01
  596. 2000-03-01 ….*/
  597. ———— — Selected named date styles ———— DECLARE @DateTimeValue varchar(32) — US - Style
  598. SELECT
  599. @DateTimeValue = ’10 / 23 / 2016′
  600. SELECT
  601. StringDate = @DateTimeValue,
  602. [US - Style] = CONVERT(datetime, @DatetimeValue)
  603. SELECT
  604. @DateTimeValue = ’10 / 23 / 2016 23 : 01 : 05′
  605. SELECT
  606. StringDate = @DateTimeValue,
  607. [US - Style] = CONVERT(datetime, @DatetimeValue) — UK - Style,
  608. British / French – convert string to datetime sql — sql convert string to datetime
  609. SELECT
  610. @DateTimeValue = ’23 / 10 / 16 23 : 01 : 05′
  611. SELECT
  612. StringDate = @DateTimeValue,
  613. [UK - Style] = CONVERT(datetime, @DatetimeValue, 3)
  614. SELECT
  615. @DateTimeValue = ’23 / 10 / 2016 04 : 01 PM’
  616. SELECT
  617. StringDate = @DateTimeValue,
  618. [UK - Style] = CONVERT(datetime, @DatetimeValue, 103) — German - Style
  619. SELECT
  620. @DateTimeValue = ‘23.10.16 23 : 01 : 05’
  621. SELECT
  622. StringDate = @DateTimeValue,
  623. [German - Style] = CONVERT(datetime, @DatetimeValue, 4)
  624. SELECT
  625. @DateTimeValue = ‘23.10.2016 04 : 01 PM’
  626. SELECT
  627. StringDate = @DateTimeValue,
  628. [German - Style] = CONVERT(datetime, @DatetimeValue, 104) ———— — Double conversion to US - Style 107 with century : Oct 23,
  629. 2016
  630. SET
  631. @DateTimeValue = ’10 / 23 / 16′
  632. SELECT
  633. StringDate = @DateTimeValue,
  634. [US - Style] = CONVERT(
  635. varchar,
  636. CONVERT(datetime, @DateTimeValue),
  637. 107
  638. ) — Using DATEFORMAT – UK - Style – SQL dateformat
  639. SET
  640. @DateTimeValue = ’23 / 10 / 16′
  641. SET
  642. DATEFORMAT dmy
  643. SELECT
  644. StringDate = @DateTimeValue,
  645. [Date Time] = CONVERT(datetime, @DatetimeValue) — Using DATEFORMAT – US - Style
  646. SET
  647. DATEFORMAT mdy — Convert date string
  648. from
  649. DD / MM / YYYY UK format to MM / DD / YYYY US format DECLARE @UKdate char(10) = ’15 / 03 / 2016′
  650. SELECT
  651. CONVERT(
  652. CHAR(10),
  653. CONVERT(datetime, @UKdate, 103),
  654. 101
  655. ) — 03 / 15 / 2016 — DATEPART datetime function example – SQL Server datetime functions
  656. SELECT
  657. *
  658. FROM
  659. Northwind.dbo.Orders
  660. WHERE
  661. DATEPART(YEAR, OrderDate) = ‘1996’
  662. AND DATEPART(MONTH, OrderDate) = ’07’
  663. AND DATEPART(DAY, OrderDate) = ’10’ — Alternate syntax for DATEPART example
  664. SELECT
  665. *
  666. FROM
  667. Northwind.dbo.Orders
  668. WHERE
  669. YEAR(OrderDate) = ‘1996’
  670. AND MONTH(OrderDate) = ’07’
  671. AND DAY(OrderDate) = ’10’ ———— — T - SQL calculate the number of business days function / UDF – exclude SAT & SUN ———— CREATE FUNCTION fnBusinessDays (
  672. @StartDate DATETIME, @EndDate DATETIME
  673. ) RETURNS INT AS BEGIN IF (
  674. @StartDate IS NULL
  675. OR @EndDate IS NULL
  676. ) RETURN (0) DECLARE @i INT = 0;
  677. WHILE (@StartDate <= @EndDate) BEGIN
  678. SET
  679. @i = @i + CASE WHEN datepart(dw, @StartDate) BETWEEN 2
  680. AND 6 THEN 1 ELSE 0 END
  681. SET
  682. @StartDate = @StartDate + 1 END — while RETURN (@i) END — function GO
  683. SELECT
  684. dbo.fnBusinessDays(
  685. ‘2016 - 01 - 01′, ’2016 - 12 - 31’
  686. ) — 261 ———— — T - SQL DATENAME function usage for weekdays
  687. SELECT
  688. DayName = DATENAME(weekday, OrderDate),
  689. SalesPerWeekDay = COUNT(*)
  690. FROM
  691. AdventureWorks2008.Sales.SalesOrderHeader
  692. GROUP BY
  693. DATENAME(weekday, OrderDate),
  694. DATEPART(weekday, OrderDate)
  695. ORDER BY
  696. DATEPART(weekday, OrderDate)
  697. /* DayName SalesPerWeekDay
  698. Sunday 4482
  699. Monday 4591
  700. Tuesday 4346…. */
  701. — DATENAME application for months
  702. SELECT
  703. MonthName = DATENAME(month, OrderDate),
  704. SalesPerMonth = COUNT(*)
  705. FROM
  706. AdventureWorks2008.Sales.SalesOrderHeader
  707. GROUP BY
  708. DATENAME(month, OrderDate),
  709. MONTH(OrderDate)
  710. ORDER BY
  711. MONTH(OrderDate)
  712. /* MonthName SalesPerMonth
  713. January 2483
  714. February 2686
  715. March 2750
  716. April 2740…. */
  717. — Getting month name
  718. from
  719. month number
  720. SELECT
  721. DATENAME(
  722. MM,
  723. dateadd(MM, 7,-1)
  724. ) — July ———— — Extract string date
  725. from
  726. text with PATINDEX pattern matching — Apply sql server string to date conversion ———— USE tempdb;
  727. go CREATE TABLE InsiderTransaction (
  728. InsiderTransactionID int identity primary key,
  729. TradeDate datetime,
  730. TradeMsg varchar(256),
  731. ModifiedDate datetime default (
  732. getdate()
  733. )
  734. ) — Populate table with dummy data INSERT InsiderTransaction (TradeMsg)
  735. VALUES
  736. (
  737. ‘INSIDER TRAN QABC Hammer, Bruce D.CSO 09 - 02 - 08 Buy 2,
  738. 000 6.10’
  739. ) INSERT InsiderTransaction (TradeMsg)
  740. VALUES
  741. (
  742. ‘INSIDER TRAN QABC Schmidt, Steven CFO 08 - 25 - 08 Buy 2,
  743. 500 6.70’
  744. ) INSERT InsiderTransaction (TradeMsg)
  745. VALUES
  746. (
  747. ‘INSIDER TRAN QABC Hammer, Bruce D.CSO 08 - 20 - 08 Buy 3,
  748. 000 8.59’
  749. ) INSERT InsiderTransaction (TradeMsg)
  750. VALUES
  751. (
  752. ‘INSIDER TRAN QABC Walters, Jeff CTO 08 - 15 - 08 Sell 5,
  753. 648 8.49’
  754. ) INSERT InsiderTransaction (TradeMsg)
  755. VALUES
  756. (
  757. ‘INSIDER TRAN QABC Walters, Jeff CTO 08 - 15 - 08 Option Execute 5,
  758. 648 2.15’
  759. ) INSERT InsiderTransaction (TradeMsg)
  760. VALUES
  761. (
  762. ‘INSIDER TRAN QABC Hammer, Bruce D.CSO 07 - 31 - 08 Buy 5,
  763. 000 8.05’
  764. ) INSERT InsiderTransaction (TradeMsg)
  765. VALUES
  766. (
  767. ‘INSIDER TRAN QABC Lennot, Mark B.Director 08 - 31 - 07 Buy 1,
  768. 500 9.97’
  769. ) INSERT InsiderTransaction (TradeMsg)
  770. VALUES
  771. (
  772. ‘INSIDER TRAN QABC O”Neal, Linda COO 08 - 01 - 08 Sell 5,
  773. 000 6.50’
  774. ) — Extract dates
  775. from
  776. stock trade message text — Pattern match for MM - DD - YY using the PATINDEX string function
  777. SELECT
  778. TradeDate = substring(
  779. TradeMsg,
  780. patindex(
  781. ‘ % [01][0 - 9] - [0123][0 - 9] - [0 - 9][0 - 9] % ’,
  782. TradeMsg
  783. ),
  784. 8
  785. )
  786. FROM
  787. InsiderTransaction
  788. WHERE
  789. patindex(
  790. ‘ % [01][0 - 9] - [0123][0 - 9] - [0 - 9][0 - 9] % ’,
  791. TradeMsg
  792. ) > 0
  793. /* Partial results
  794. TradeDate
  795. 09-02-08
  796. 08-25-08
  797. 08-20-08 */
  798. —
  799. Update
  800. table with extracted date — Convert string date to datetime
  801. UPDATE
  802. InsiderTransaction
  803. SET
  804. TradeDate = convert(
  805. datetime,
  806. substring(
  807. TradeMsg,
  808. patindex(
  809. ‘ % [01][0 - 9] - [0123][0 - 9] - [0 - 9][0 - 9] % ’,
  810. TradeMsg
  811. ),
  812. 8
  813. )
  814. )
  815. WHERE
  816. patindex(
  817. ‘ % [01][0 - 9] - [0123][0 - 9] - [0 - 9][0 - 9] % ’,
  818. TradeMsg
  819. ) > 0
  820. SELECT
  821. *
  822. FROM
  823. InsiderTransaction
  824. ORDER BY
  825. TradeDate desc
  826. /* Partial results
  827. InsiderTransactionID TradeDate TradeMsg ModifiedDate
  828. 1 2008-09-02 00:00:00.000 INSIDER TRAN QABC Hammer, Bruce D. CSO 09-02-08 Buy 2,000 6.10 2008-12-22 20:25:19.263
  829. 2 2008-08-25 00:00:00.000 INSIDER TRAN QABC Schmidt, Steven CFO 08-25-08 Buy 2,500 6.70 2008-12-22 20:25:19.263 */
  830. — Cleanup task
  831. DROP
  832. TABLE InsiderTransaction
  833. /************
  834. VALID DATE RANGES FOR DATE / DATETIME DATA TYPES
  835. DATE (3 bytes) date range:
  836. January 1, 1 A.D. through December 31, 9999 A.D.
  837. SMALLDATETIME (4 bytes) date range:
  838. January 1, 1900 through June 6, 2079
  839. DATETIME (8 bytes) date range:
  840. January 1, 1753 through December 31, 9999
  841. DATETIME2 (6-8 bytes) date range:
  842. January 1, 1 A.D. through December 31, 9999 A.D.
  843. — The statement below will give a date range error
  844. SELECT CONVERT(smalldatetime, ‘2110-01-01’)
  845. /* Msg 242, Level 16, State 3, Line 1
  846. The conversion of a varchar data type to a smalldatetime data type
  847. resulted in an out-of-range value. */
  848. ************/ ———— — SQL CONVERT DATE / DATETIME script applying table variable ———— — SQL Server convert date — Datetime column is converted into date only string column DECLARE @sqlConvertDate TABLE (
  849. DatetimeColumn datetime,
  850. DateColumn char(10)
  851. );
  852. INSERT @sqlConvertDate (DatetimeColumn)
  853. SELECT
  854. GETDATE()
  855. UPDATE
  856. @sqlConvertDate
  857. SET
  858. DateColumn = CONVERT(
  859. char(10),
  860. DatetimeColumn,
  861. 111
  862. )
  863. SELECT
  864. *
  865. FROM
  866. @sqlConvertDate — SQL Server convert datetime – String date column converted into datetime column
  867. UPDATE
  868. @sqlConvertDate
  869. SET
  870. DatetimeColumn = CONVERT(Datetime, DateColumn, 111)
  871. SELECT
  872. *
  873. FROM
  874. @sqlConvertDate — Equivalent formulation – SQL Server cast datetime
  875. UPDATE
  876. @sqlConvertDate
  877. SET
  878. DatetimeColumn = CAST(DateColumn AS datetime)
  879. SELECT
  880. *
  881. FROM
  882. @sqlConvertDate
  883. /* First results
  884. DatetimeColumn DateColumn
  885. 2012-12-25 15:54:10.363 2012/12/25 */
  886. /* Second results:
  887. DatetimeColumn DateColumn
  888. 2012-12-25 00:00:00.000 2012/12/25 */
  889. ———— — SQL date sequence generation with dateadd & table variable — SQL Server cast datetime to string – SQL Server insert default
  890. values
  891. method DECLARE @Sequence table (
  892. Sequence int identity(1, 1)
  893. ) DECLARE @i int;
  894. SET
  895. @i = 0 WHILE (@i < 500) BEGIN INSERT @Sequence DEFAULT
  896. VALUES
  897. SET
  898. @i = @i + 1 END
  899. SELECT
  900. DateSequence = CAST(
  901. dateadd(
  902. day,
  903. Sequence,
  904. getdate()
  905. ) AS varchar
  906. )
  907. FROM
  908. @Sequence
  909. /* Partial results:
  910. DateSequence
  911. Dec 31 2008 3:02AM
  912. Jan 1 2009 3:02AM
  913. Jan 2 2009 3:02AM
  914. Jan 3 2009 3:02AM
  915. Jan 4 2009 3:02AM */
  916. ———— — SQL Last Week calculations ———— — SQL last Friday – Implied string to datetime conversions in dateadd & datediff DECLARE @BaseFriday CHAR(8),
  917. @LastFriday datetime,
  918. @LastMonday datetime
  919. SET
  920. @BaseFriday = ‘19000105’
  921. SELECT
  922. @LastFriday = dateadd(
  923. dd,
  924. (
  925. datediff (
  926. dd, @BaseFriday, CURRENT_TIMESTAMP
  927. ) / 7
  928. ) * 7,
  929. @BaseFriday
  930. )
  931. SELECT
  932. [Last Friday] = @LastFriday — Result : 2008 - 12 - 26 00 : 00 : 00.000 — SQL last Monday (last week’s Monday)
  933. SELECT
  934. @LastMonday = dateadd(
  935. dd,
  936. (
  937. datediff (
  938. dd, @BaseFriday, CURRENT_TIMESTAMP
  939. ) / 7
  940. ) * 7 – 4,
  941. @BaseFriday
  942. )
  943. SELECT
  944. [Last Monday] = @LastMonday — Result : 2008 - 12 - 22 00 : 00 : 00.000 — SQL last week – SUN – SAT
  945. SELECT
  946. [Last Week] = CONVERT(
  947. varchar,
  948. dateadd(day, -1, @LastMonday),
  949. 101
  950. )+ ‘ – ‘ + CONVERT(
  951. varchar,
  952. dateadd(day, 1, @LastFriday),
  953. 101
  954. ) — Result : 12 / 21 / 2008 – 12 / 27 / 2008 —————– — Specific day calculations ———— — First day of current month
  955. SELECT
  956. dateadd(
  957. month,
  958. datediff(
  959. month,
  960. 0,
  961. getdate()
  962. ),
  963. 0
  964. ) — 15th day of current month
  965. SELECT
  966. dateadd(
  967. day,
  968. 14,
  969. dateadd(
  970. month,
  971. datediff(
  972. month,
  973. 0,
  974. getdate()
  975. ),
  976. 0
  977. )
  978. ) — First Monday of current month
  979. SELECT
  980. dateadd(
  981. day,
  982. (
  983. 9 - datepart(
  984. weekday,
  985. dateadd(
  986. month,
  987. datediff(
  988. month,
  989. 0,
  990. getdate()
  991. ),
  992. 0
  993. )
  994. )
  995. )% 7,
  996. dateadd(
  997. month,
  998. datediff(
  999. month,
  1000. 0,
  1001. getdate()
  1002. ),
  1003. 0
  1004. )
  1005. ) — Next Monday calculation
  1006. from
  1007. the reference date which was a Monday DECLARE @Now datetime = GETDATE();
  1008. DECLARE @NextMonday datetime = dateadd(
  1009. dd,
  1010. (
  1011. (
  1012. datediff(dd, ‘19000101’, @Now) / 7
  1013. ) * 7
  1014. ) + 7,
  1015. ‘19000101’
  1016. );
  1017. SELECT
  1018. [Now] = @Now,
  1019. [Next Monday] = @NextMonday — Last Friday of current month
  1020. SELECT
  1021. dateadd(
  1022. day,
  1023. -7 +(
  1024. 6 - datepart(
  1025. weekday,
  1026. dateadd(
  1027. month,
  1028. datediff(
  1029. month,
  1030. 0,
  1031. getdate()
  1032. )+ 1,
  1033. 0
  1034. )
  1035. )
  1036. )% 7,
  1037. dateadd(
  1038. month,
  1039. datediff(
  1040. month,
  1041. 0,
  1042. getdate()
  1043. )+ 1,
  1044. 0
  1045. )
  1046. ) — First day of next month
  1047. SELECT
  1048. dateadd(
  1049. month,
  1050. datediff(
  1051. month,
  1052. 0,
  1053. getdate()
  1054. )+ 1,
  1055. 0
  1056. ) — 15th of next month
  1057. SELECT
  1058. dateadd(
  1059. day,
  1060. 14,
  1061. dateadd(
  1062. month,
  1063. datediff(
  1064. month,
  1065. 0,
  1066. getdate()
  1067. )+ 1,
  1068. 0
  1069. )
  1070. ) — First Monday of next month
  1071. SELECT
  1072. dateadd(
  1073. day,
  1074. (
  1075. 9 - datepart(
  1076. weekday,
  1077. dateadd(
  1078. month,
  1079. datediff(
  1080. month,
  1081. 0,
  1082. getdate()
  1083. )+ 1,
  1084. 0
  1085. )
  1086. )
  1087. )% 7,
  1088. dateadd(
  1089. month,
  1090. datediff(
  1091. month,
  1092. 0,
  1093. getdate()
  1094. )+ 1,
  1095. 0
  1096. )
  1097. ) ———— — SQL Last Date calculations ———— — Last day of prior month – Last day of previous month
  1098. SELECT
  1099. convert(
  1100. varchar,
  1101. dateadd(
  1102. dd,
  1103. -1,
  1104. dateadd(
  1105. mm,
  1106. datediff(
  1107. mm,
  1108. 0,
  1109. getdate()
  1110. ),
  1111. 0
  1112. )
  1113. ),
  1114. 101
  1115. ) — 01 / 31 / 2019 — Last day of current month
  1116. SELECT
  1117. convert(
  1118. varchar,
  1119. dateadd(
  1120. dd,
  1121. -1,
  1122. dateadd(
  1123. mm,
  1124. datediff(
  1125. mm,
  1126. 0,
  1127. getdate()
  1128. )+ 1,
  1129. 0
  1130. )
  1131. ),
  1132. 101
  1133. ) — 02 / 28 / 2019 — Last day of prior quarter – Last day of previous quarter
  1134. SELECT
  1135. convert(
  1136. varchar,
  1137. dateadd(
  1138. dd,
  1139. -1,
  1140. dateadd(
  1141. qq,
  1142. datediff(
  1143. qq,
  1144. 0,
  1145. getdate()
  1146. ),
  1147. 0
  1148. )
  1149. ),
  1150. 101
  1151. ) — 12 / 31 / 2018 — Last day of current quarter – Last day of current quarter
  1152. SELECT
  1153. convert(
  1154. varchar,
  1155. dateadd(
  1156. dd,
  1157. -1,
  1158. dateadd(
  1159. qq,
  1160. datediff(
  1161. qq,
  1162. 0,
  1163. getdate()
  1164. )+ 1,
  1165. 0
  1166. )
  1167. ),
  1168. 101
  1169. ) — 03 / 31 / 2019 — Last day of prior year – Last day of previous year
  1170. SELECT
  1171. convert(
  1172. varchar,
  1173. dateadd(
  1174. dd,
  1175. -1,
  1176. dateadd(
  1177. yy,
  1178. datediff(
  1179. yy,
  1180. 0,
  1181. getdate()
  1182. ),
  1183. 0
  1184. )
  1185. ),
  1186. 101
  1187. ) — 12 / 31 / 2018 — Last day of current year
  1188. SELECT
  1189. convert(
  1190. varchar,
  1191. dateadd(
  1192. dd,
  1193. -1,
  1194. dateadd(
  1195. yy,
  1196. datediff(
  1197. yy,
  1198. 0,
  1199. getdate()
  1200. )+ 1,
  1201. 0
  1202. )
  1203. ),
  1204. 101
  1205. ) — 12 / 31 / 2019 ———— — SQL Server dateformat
  1206. and language setting ———— — T - SQL
  1207. set
  1208. language – String to date conversion
  1209. SET
  1210. LANGUAGE us_english
  1211. SELECT
  1212. CAST(‘2018 - 03 - 15’ AS datetime) — 2018 - 03 - 15 00 : 00 : 00.000
  1213. SET
  1214. LANGUAGE british
  1215. SELECT
  1216. CAST(‘2018 - 03 - 15’ AS datetime)
  1217. /* Msg 242, Level 16, State 3, Line 2
  1218. The conversion of a varchar data type to a datetime data type resulted in
  1219. an out-of-range value.
  1220. */
  1221. SELECT
  1222. CAST(‘2018 - 15 - 03’ AS datetime) — 2018 - 03 - 15 00 : 00 : 00.000
  1223. SET
  1224. LANGUAGE us_english — SQL dateformat with language dependency
  1225. SELECT
  1226. name,
  1227. alias,
  1228. dateformat
  1229. FROM
  1230. sys.syslanguages
  1231. WHERE
  1232. langid in (0, 1, 2, 4, 5, 6, 7, 10, 11, 13, 23, 31) GO
  1233. /*
  1234. name alias dateformat
  1235. us_english English mdy
  1236. Deutsch German dmy
  1237. Français French dmy
  1238. Dansk Danish dmy
  1239. Español Spanish dmy
  1240. Italiano Italian dmy
  1241. Nederlands Dutch dmy
  1242. Suomi Finnish dmy
  1243. Svenska Swedish ymd
  1244. magyar Hungarian ymd
  1245. British British English dmy
  1246. Arabic Arabic dmy */
  1247. ————
  1248. SELECT
  1249. REPLACE(
  1250. CONVERT(
  1251. VARCHAR(10),
  1252. GETDATE(),
  1253. 103
  1254. ),
  1255. ‘ / ’,
  1256. ”
  1257. ) AS [DDMMYYYY] to fetch only years declare @GiveAge date = getdate() print cast(
  1258. YEAR(@GiveAge) as int
  1259. )% 100 YEAR(@GiveAge, yy) mmddyy ::
  1260. select
  1261. replace(
  1262. convert(
  1263. char(10),
  1264. getdate(),
  1265. 101
  1266. ),
  1267. ‘ / ’,
  1268. ”
  1269. ) –CURRENT_TIMESTAMP –CURRENT_TIMESTAMP is a nondeterministic function.Views
  1270. and expressions that reference this column cannot be indexed.— CURRENT_TIMESTAMP can be used to print the current date
  1271. and time every time that the report is produced.–GETDATE() –GETDATE is a nondeterministic function.Views
  1272. and expressions that reference this column –cannot be indexed.GETDATE can be used to print the current date
  1273. and time every time that the report is produced.–{fn Now() } –The {fn Now() } is an ODBC canonical function which can be used in T - SQL since the OLE DB –provider for SQL Server supports them.{fn Now() } can be used to print the current date
  1274. and time every time that the report is produced.–If you run following script in Query Analyzer.I will give you same results.If you see execution –plan there is no performance difference.It is same for all the three
  1275. select
  1276. statement.
  1277. SELECT
  1278. CURRENT_TIMESTAMP GO
  1279. SELECT
  1280. {fn NOW() } GO
  1281. SELECT
  1282. GETDATE() GO