SELECT convert(varchar, getdate(), 100) -- mon dd yyyy hh:mmAM (or PM) 

                                        -- Oct  2 2010 11:01AM           

SELECT convert(varchar, getdate(), 101) -- mm/dd/yyyy - 10/02/2010                   

SELECT convert(varchar, getdate(), 102) -- yyyy.mm.dd - 2010.10.02            

SELECT convert(varchar, getdate(), 103) -- dd/mm/yyyy 

SELECT convert(varchar, getdate(), 104) -- dd.mm.yyyy 

SELECT convert(varchar, getdate(), 105) -- dd-mm-yyyy 

SELECT convert(varchar, getdate(), 106) -- dd mon yyyy 

SELECT convert(varchar, getdate(), 107) -- mon dd, yyyy 

SELECT convert(varchar, getdate(), 108) -- hh:mm:ss 

SELECT convert(varchar, getdate(), 109) -- mon dd yyyy hh:mm:ss:mmmAM (or PM) 

                                        -- Oct  2 2010 11:02:44:013AM    

SELECT convert(varchar, getdate(), 110) -- mm-dd-yyyy 

SELECT convert(varchar, getdate(), 111) -- yyyy/mm/dd 

-- yyyymmdd - ISO date format - international standard - works with any language setting 

SELECT convert(varchar, getdate(), 112) -- yyyymmdd 

SELECT convert(varchar, getdate(), 113) -- dd mon yyyy hh:mm:ss:mmm 

                                        -- 02 Oct 2010 11:02:07:577      

SELECT convert(varchar, getdate(), 114) -- hh:mm:ss:mmm(24h) 

SELECT convert(varchar, getdate(), 120) -- yyyy-mm-dd hh:mm:ss(24h) 

SELECT convert(varchar, getdate(), 121) -- yyyy-mm-dd hh:mm:ss.mmm 

SELECT convert(varchar, getdate(), 126) -- yyyy-mm-ddThh:mm:ss.mmm 

                                        -- 2010-10-02T10:52:47.513

-- Without century (YY) date / datetime conversion - there are exceptions!

SELECT convert(varchar, getdate(), 0)   -- mon dd yyyy hh:mmAM (or PM) 

SELECT convert(varchar, getdate(), 1)   -- mm/dd/yy 

SELECT convert(varchar, getdate(), 2)   -- yy.mm.dd           

SELECT convert(varchar, getdate(), 3)   -- dd/mm/yy

SELECT convert(varchar, getdate(), 4)   -- dd.mm.yy

SELECT convert(varchar, getdate(), 5)   -- dd-mm-yy 

SELECT convert(varchar, getdate(), 6)   -- dd mon yy 

SELECT convert(varchar, getdate(), 7)   -- mon dd, yy 

SELECT convert(varchar, getdate(), 8)   -- hh:mm:ss 

SELECT convert(varchar, getdate(), 9)   -- mon dd yyyy hh:mm:ss:mmmAM (or PM) 

SELECT convert(varchar, getdate(), 10) -- mm-dd-yy 

SELECT convert(varchar, getdate(), 11) -- yy/mm/dd 

SELECT convert(varchar, getdate(), 12) -- yymmdd 

SELECT convert(varchar, getdate(), 13) -- dd mon yyyy hh:mm:ss:mmm 

SELECT convert(varchar, getdate(), 14) -- hh:mm:ss:mmm(24h) 

SELECT convert(varchar, getdate(), 20) -- yyyy-mm-dd hh:mm:ss(24h) 

SELECT convert(varchar, getdate(), 21) -- yyyy-mm-dd hh:mm:ss.mmm 

SELECT convert(varchar, getdate(), 22) -- mm/dd/yy hh:mm:ss AM (or PM)

SELECT convert(varchar, getdate(), 23) -- yyyy-mm-dd

SELECT convert(varchar, getdate(), 24) -- hh:mm:ss 

SELECT convert(varchar, getdate(), 25) -- yyyy-mm-dd hh:mm:ss.mmm 

-- SQL create different date styles with t-sql string functions

SELECT replace(convert(varchar, getdate(), 111), \'/\', \' \') -- yyyy mm dd

SELECT convert(varchar(7), getdate(), 126)                 -- yyyy-mm

SELECT right(convert(varchar, getdate(), 106), 8)          -- mon yyyy
SELECT substring(convert(varchar, getdate(), 120),6, 11)   -- mm-dd hh:mm

------------

-- SQL Server date formatting function - convert datetime to string 

------------

-- SQL datetime functions - SQL date functions - SQL datetime formatting

-- SQL Server date formats - sql server date datetime - sql date formatting 

-- T-SQL convert dates - T-SQL date formats - Transact-SQL date formats 

-- Formatting dates sql server - sql convert datetime format

CREATE FUNCTION dbo.fnFormatDate (@Datetime DATETIME, @FormatMask VARCHAR(32)) 

RETURNS VARCHAR(32) 

AS 

BEGIN 

    DECLARE @StringDate VARCHAR(32) 

    SET @StringDate = @FormatMask

    IF (CHARINDEX (\'YYYY\',@StringDate) > 0)

       SET @StringDate = REPLACE(@StringDate, \'YYYY\', DATENAME(YY, @Datetime))

    IF (CHARINDEX (\'YY\',@StringDate) > 0)

       SET @StringDate = REPLACE(@StringDate, \'YY\', RIGHT(DATENAME(YY, @Datetime),2))

    IF (CHARINDEX (\'Month\',@StringDate) > 0)

       SET @StringDate = REPLACE(@StringDate, \'Month\', DATENAME(MM, @Datetime))

    IF (CHARINDEX (\'MON\',@StringDate COLLATE SQL_Latin1_General_CP1_CS_AS)>0)

       SET @StringDate = REPLACE(@StringDate, \'MON\', 

                         LEFT(UPPER(DATENAME(MM, @Datetime)),3))

    IF (CHARINDEX (\'Mon\',@StringDate) > 0)

       SET @StringDate = REPLACE(@StringDate, \'Mon\', LEFT(DATENAME(MM, @Datetime),3))

    IF (CHARINDEX (\'MM\',@StringDate) > 0)

       SET @StringDate = REPLACE(@StringDate, \'MM\', 

                  RIGHT(\'0\'+CONVERT(VARCHAR,DATEPART(MM, @Datetime)),2))

    IF (CHARINDEX (\'M\',@StringDate) > 0)

       SET @StringDate = REPLACE(@StringDate, \'M\', 

                         CONVERT(VARCHAR,DATEPART(MM, @Datetime)))

    IF (CHARINDEX (\'DD\',@StringDate) > 0)

       SET @StringDate = REPLACE(@StringDate, \'DD\', 

                         RIGHT(\'0\'+DATENAME(DD, @Datetime),2))

    IF (CHARINDEX (\'D\',@StringDate) > 0)

       SET @StringDate = REPLACE(@StringDate, \'D\', DATENAME(DD, @Datetime))    

RETURN @StringDate

END

GO

 

-- Microsoft SQL Server date format function test

-- MSSQL formatting dates - sql datetime date 

SELECT dbo.fnFormatDate (getdate(), \'MM/DD/YYYY\')           -- 01/03/2012

SELECT dbo.fnFormatDate (getdate(), \'DD/MM/YYYY\')           -- 03/01/2012

SELECT dbo.fnFormatDate (getdate(), \'M/DD/YYYY\')            -- 1/03/2012

SELECT dbo.fnFormatDate (getdate(), \'M/D/YYYY\')             -- 1/3/2012

SELECT dbo.fnFormatDate (getdate(), \'M/D/YY\')               -- 1/3/12

SELECT dbo.fnFormatDate (getdate(), \'MM/DD/YY\')             -- 01/03/12

SELECT dbo.fnFormatDate (getdate(), \'MON DD, YYYY\')         -- JAN 03, 2012

SELECT dbo.fnFormatDate (getdate(), \'Mon DD, YYYY\')         -- Jan 03, 2012

SELECT dbo.fnFormatDate (getdate(), \'Month DD, YYYY\')       -- January 03, 2012

SELECT dbo.fnFormatDate (getdate(), \'YYYY/MM/DD\')           -- 2012/01/03

SELECT dbo.fnFormatDate (getdate(), \'YYYYMMDD\')             -- 20120103

SELECT dbo.fnFormatDate (getdate(), \'YYYY-MM-DD\')           -- 2012-01-03

-- CURRENT_TIMESTAMP returns current system date and time in standard internal format

SELECT dbo.fnFormatDate (CURRENT_TIMESTAMP,\'YY.MM.DD\')      -- 12.01.03

GO

------------

 

/***** SELECTED SQL DATE/DATETIME FORMATS WITH NAMES *****/

 

-- SQL format datetime - - sql hh mm ss - sql yyyy mm dd 

-- Default format: Oct 23 2006 10:40AM

SELECT [Default]=CONVERT(varchar,GETDATE(),100) 

 

-- US-Style format: 10/23/2006

SELECT [US-Style]=CONVERT(char,GETDATE(),101) 

 

-- ANSI format: 2006.10.23

SELECT [ANSI]=CONVERT(char,CURRENT_TIMESTAMP,102) 

 

-- UK-Style format: 23/10/2006

SELECT [UK-Style]=CONVERT(char,GETDATE(),103)

 

-- German format: 23.10.2006

SELECT [German]=CONVERT(varchar,GETDATE(),104)

 

-- ISO format: 20061023

SELECT ISO=CONVERT(varchar,GETDATE(),112)

 

-- ISO8601 format: 2010-10-23T19:20:16.003

SELECT [ISO8601]=CONVERT(varchar,GETDATE(),126)

------------

 

-- SQL Server datetime formats - Format dates SQL Server 2005 / 2008 
-- Century date format MM/DD/YYYY usage in a query

SELECT TOP (1) 

      SalesOrderID, 

      OrderDate = CONVERT(char(10), OrderDate, 101), 

      OrderDateTime = OrderDate

FROM AdventureWorks.Sales.SalesOrderHeader

/*

SalesOrderID      OrderDate               OrderDateTime

43697             07/01/2001          2001-07-01 00:00:00.000

*/

 

-- SQL update datetime column - SQL datetime DATEADD - datetime function 

UPDATE Production.Product 

SET ModifiedDate=DATEADD(dd,1, ModifiedDate)

WHERE ProductID = 1001

 

-- MM/DD/YY date format - Datetime format sql

SELECT TOP (1) 

      SalesOrderID, 

      OrderDate = CONVERT(varchar(8), OrderDate, 1), 

      OrderDateTime = OrderDate

FROM AdventureWorks.Sales.SalesOrderHeader

ORDER BY SalesOrderID desc

/* 

SalesOrderID      OrderDate         OrderDateTime

75123             07/31/04          2004-07-31 00:00:00.000

*/

------------

-- SQL convert datetime to char - sql date string concatenation: + (plus) operator 

PRINT \'Style 110: \'+CONVERT(CHAR(10),GETDATE(),110)         -- Style 110: 07-10-2012

PRINT \'Style 111: \'+CONVERT(CHAR(10),GETDATE(),111)         -- Style 111: 2012/07/10

PRINT \'Style 112: \'+CONVERT(CHAR(8), GETDATE(),112)         -- Style 112: 20120710    

------------

-- Combining different style formats for date & time

-- Datetime formats - sql times format - datetime formats sql 

DECLARE @Date DATETIME

SET @Date = \'2015-12-22 03:51 PM\'

SELECT CONVERT(CHAR(10),@Date,110) + SUBSTRING(CONVERT(varchar,@Date,0),12,8)

-- Result: 12-22-2015  3:51PM

 

-- Microsoft SQL Server cast datetime to string

SELECT stringDateTime=CAST (getdate() as varchar)

-- Result: Dec 29 2012  3:47AM

------------

-- SQL Server date and time functions overview

------------

-- SQL Server CURRENT_TIMESTAMP function 

-- SQL Server datetime functions 

-- local NYC - EST - Eastern Standard Time zone

-- SQL DATEADD function - SQL DATEDIFF function 

SELECT CURRENT_TIMESTAMP                        -- 2012-01-05 07:02:10.577

-- SQL Server DATEADD function

SELECT DATEADD(month,2,\'2012-12-09\')            -- 2013-02-09 00:00:00.000

-- SQL Server DATEDIFF function

SELECT DATEDIFF(day,\'2012-12-09\',\'2013-02-09\') -- 62 

-- SQL Server DATENAME function

SELECT DATENAME(month,   \'2012-12-09\')          -- December

SELECT DATENAME(weekday, \'2012-12-09\')          -- Sunday

-- SQL Server DATEPART function

SELECT DATEPART(month, \'2012-12-09\')            -- 12

-- SQL Server DAY function

SELECT DAY(\'2012-12-09\')                        -- 9

-- SQL Server GETDATE function 

-- local NYC - EST - Eastern Standard Time zone

SELECT GETDATE()                                -- 2012-01-05 07:02:10.577

-- SQL Server GETUTCDATE function 

-- London - Greenwich Mean Time

SELECT GETUTCDATE()                             -- 2012-01-05 12:02:10.577

-- SQL Server MONTH function

SELECT MONTH(\'2012-12-09\')                      -- 12

-- SQL Server YEAR function

SELECT YEAR(\'2012-12-09\')                       -- 2012

 

 

------------

-- T-SQL Date and time function application

-- CURRENT_TIMESTAMP and getdate() are the same in T-SQL

------------

-- T-SQL first day of week and last day of week 

SELECT FirstDateOfWeek = dateadd(dd,-DATEPART(dw,GETDATE()) + 1,GETDATE()) 

SELECT LastDateOfWeek = dateadd(dd,7 - DATEPART(dw,GETDATE()),GETDATE())

-- SQL first day of the month

-- SQL first date of the month

-- SQL first day of current month - 2012-01-01 00:00:00.000

SELECT DATEADD(dd,0,DATEADD(mm, DATEDIFF(mm,0,CURRENT_TIMESTAMP),0))

-- SQL last day of the month 

-- SQL last date of the month 

-- SQL last day of current month - 2012-01-31 00:00:00.000

SELECT DATEADD(dd,-1,DATEADD(mm, DATEDIFF(mm,0,CURRENT_TIMESTAMP)+1,0))

-- SQL first day of last month

-- SQL first day of previous month - 2011-12-01 00:00:00.000

SELECT DATEADD(mm,-1,DATEADD(mm, DATEDIFF(mm,0,CURRENT_TIMESTAMP),0))

-- SQL last day of last month 

-- SQL last day of previous month - 2011-12-31 00:00:00.000

SELECT DATEADD(dd,-1,DATEADD(mm, DATEDIFF(mm,0,DATEADD(MM,-1,GETDATE()))+1,0))

-- SQL first day of next month - 2012-02-01 00:00:00.000

SELECT DATEADD(mm,1,DATEADD(mm, DATEDIFF(mm,0,CURRENT_TIMESTAMP),0))

-- SQL last day of next month - 2012-02-28 00:00:00.000

SELECT DATEADD(dd,-1,DATEADD(mm, DATEDIFF(mm,0,DATEADD(MM,1,GETDATE()))+1,0))

GO 

-- SQL first day of a month - 2012-10-01 00:00:00.000

DECLARE @Date datetime; SET @Date = \'2012-10-23\'

SELECT DATEADD(dd,0,DATEADD(mm, DATEDIFF(mm,0,@Date),0))

GO 

-- SQL last day of a month - 2012-03-31 00:00:00.000

DECLARE @Date datetime; SET @Date = \'2012-03-15\'

SELECT DATEADD(dd,-1,DATEADD(mm, DATEDIFF(mm,0,@Date)+1,0))
GO

-- SQL first day of year  

-- SQL first day of the year  -  2012-01-01 00:00:00.000

SELECT DATEADD(yy, DATEDIFF(yy,0,CURRENT_TIMESTAMP), 0)

-- SQL last day of year   

-- SQL last day of the year   - 2012-12-31 00:00:00.000

SELECT DATEADD(yy,1, DATEADD(dd, -1, DATEADD(yy, 

                     DATEDIFF(yy,0,CURRENT_TIMESTAMP), 0)))

-- SQL last day of last year

-- SQL last day of previous year   - 2011-12-31 00:00:00.000

SELECT DATEADD(dd,-1,DATEADD(yy,DATEDIFF(yy,0,CURRENT_TIMESTAMP), 0))
GO

-- SQL calculate age in years, months, days - Format dates SQL Server 2008

-- SQL table-valued function - SQL user-defined function - UDF

-- SQL Server age calculation - date difference

USE AdventureWorks2008; 

GO 

CREATE FUNCTION fnAge (@BirthDate DATETIME) 

RETURNS @Age TABLE(Years  INT, 

                   Months INT, 

                   Days   INT) 

AS 

 BEGIN 

    DECLARE  @EndDate     DATETIME, @Anniversary DATETIME 

    SET @EndDate = Getdate() 

    SET @Anniversary = Dateadd(yy,Datediff(yy,@BirthDate,@EndDate),@BirthDate) 

    INSERT @Age 

    SELECT Datediff(yy,@BirthDate,@EndDate) - (CASE 

                                                 WHEN @Anniversary > @EndDate THEN 1 

                                                 ELSE 0 

                                               END), 0, 0 

     UPDATE @Age     SET    Months = Month(@EndDate - @Anniversary) - 1 

    UPDATE @Age     SET    Days = Day(@EndDate - @Anniversary) - 1 

    RETURN 

 END 

GO 

 

-- Test table-valued UDF 

SELECT * FROM   fnAge(\'1956-10-23\') 

SELECT * FROM   dbo.fnAge(\'1956-10-23\') 

/* Results 

Years       Months      Days 

52          4           1 

*/

 

----------

-- SQL date range between

----------

-- SQL between dates

USE AdventureWorks;

-- SQL between

SELECT POs=COUNT(*) FROM Purchasing.PurchaseOrderHeader

WHERE OrderDate BETWEEN \'20040301\' AND \'20040315\'

-- Result: 108

 

-- BETWEEN operator is equivalent to >=...AND....<=

SELECT POs=COUNT(*) FROM Purchasing.PurchaseOrderHeader 

WHERE OrderDate 

BETWEEN \'2004-03-01 00:00:00.000\' AND \'2004-03-15  00:00:00.000\'

/*

Orders with OrderDates

\'2004-03-15  00:00:01.000\'  - 1 second after midnight (12:00AM)

\'2004-03-15  00:01:00.000\'  - 1 minute after midnight 

\'2004-03-15  01:00:00.000\'  - 1 hour after midnight

 

are not included in the two queries above.

*/

-- To include the entire day of 2004-03-15 use the following two solutions

SELECT POs=COUNT(*) FROM Purchasing.PurchaseOrderHeader

WHERE OrderDate >= \'20040301\' AND OrderDate < \'20040316\'

 

-- SQL between with DATE type (SQL Server 2008)

SELECT POs=COUNT(*) FROM Purchasing.PurchaseOrderHeader

WHERE CONVERT(DATE, OrderDate) BETWEEN \'20040301\' AND \'20040315\'

----------

-- Non-standard format conversion: 2011 December 14

-- SQL datetime to string 

SELECT [YYYY Month DD] = 

CAST(YEAR(GETDATE()) AS VARCHAR(4))+ \' \'+ 

DATENAME(MM, GETDATE()) + \' \' +

CAST(DAY(GETDATE()) AS VARCHAR(2))

 

-- Converting datetime to YYYYMMDDHHMMSS format: 20121214172638

SELECT replace(convert(varchar, getdate(),111),\'/\',\'\') + 

replace(convert(varchar, getdate(),108),\':\',\'\')

 

-- Datetime custom format conversion to YYYY_MM_DD

select CurrentDate=rtrim(year(getdate())) + \'_\' + 

right(\'0\' + rtrim(month(getdate())),2) + \'_\' + 

right(\'0\' + rtrim(day(getdate())),2) 

 

-- Converting seconds to HH:MM:SS format

declare @Seconds int

set @Seconds = 10000

select TimeSpan=right(\'0\' +rtrim(@Seconds / 3600),2) + \':\' + 

right(\'0\' + rtrim((@Seconds % 3600) / 60),2) + \':\' + 

right(\'0\' + rtrim(@Seconds % 60),2) 

-- Result: 02:46:40

 

-- Test result

select 2*3600 + 46*60 + 40

-- Result: 10000

-- Set the time portion of a datetime value to 00:00:00.000 

-- SQL strip time from date

-- SQL strip time from datetime

SELECT CURRENT_TIMESTAMP ,DATEADD(dd, DATEDIFF(dd, 0, CURRENT_TIMESTAMP), 0)

-- Results: 2014-01-23 05:35:52.793 2014-01-23 00:00:00.000

/* VALID DATE RANGES FOR DATE/DATETIME DATA TYPES

 

SMALLDATETIME (4 bytes) date range:

January 1, 1900 through June 6, 2079

 

DATETIME (8 bytes) date range:

January 1, 1753 through December 31, 9999

 

DATETIME2 (8 bytes) date range (SQL Server 2008):

January 1,1 AD through December 31, 9999 AD

 

DATE (3 bytes) date range (SQL Server 2008):

January 1, 1 AD through December 31, 9999 AD

 

*******/

-- Selecting with CONVERT into different styles

-- Note: Only Japan & ISO styles can be used in ORDER BY

SELECT TOP(1)

     Italy  = CONVERT(varchar, OrderDate, 105)

   , USA    = CONVERT(varchar, OrderDate, 110)

   , Japan  = CONVERT(varchar, OrderDate, 111)

   , ISO    = CONVERT(varchar, OrderDate, 112)

FROM AdventureWorks.Purchasing.PurchaseOrderHeader

ORDER BY PurchaseOrderID DESC

/* Results

Italy       USA         Japan       ISO

25-07-2004  07-25-2004  2004/07/25  20040725

*/

-- SQL Server convert date to integer

DECLARE @Datetime datetime

SET @Datetime = \'2012-10-23 10:21:05.345\'

SELECT DateAsInteger = CAST (CONVERT(varchar,@Datetime,112) as INT)

-- Result: 20121023

 

-- SQL Server convert integer to datetime

DECLARE @intDate int

SET @intDate = 20120315

SELECT IntegerToDatetime = CAST(CAST(@intDate as varchar) as datetime)

-- Result: 2012-03-15 00:00:00.000

------------

-- SQL Server CONVERT script applying table INSERT/UPDATE

------------

-- SQL Server convert date

-- Datetime column is converted into date only string column

USE tempdb;

GO

CREATE TABLE sqlConvertDateTime   ( 

            DatetimeCol datetime, 

            DateCol char(8));

INSERT sqlConvertDateTime (DatetimeCol) SELECT GETDATE()

 

UPDATE sqlConvertDateTime 

SET DateCol = CONVERT(char(10), DatetimeCol, 112)

SELECT * FROM sqlConvertDateTime

 

-- SQL Server convert datetime

-- The string date column is converted into datetime column

UPDATE sqlConvertDateTime 

SET DatetimeCol = CONVERT(Datetime, DateCol, 112)

SELECT * FROM sqlConvertDateTime

 

-- Adding a day to the converted datetime column with DATEADD

UPDATE sqlConvertDateTime 

SET DatetimeCol = DATEADD(day, 1, CONVERT(Datetime, DateCol, 112))

SELECT * FROM sqlConvertDateTime

 

-- Equivalent formulation

-- SQL Server cast datetime

UPDATE sqlConvertDateTime 

SET DatetimeCol = DATEADD(dd, 1, CAST(DateCol AS datetime))

SELECT * FROM sqlConvertDateTime

GO

DROP TABLE sqlConvertDateTime

GO

/* First results

DatetimeCol                   DateCol

2014-12-25 16:04:15.373       20141225 */

 

/* Second results:

DatetimeCol                   DateCol

2014-12-25 00:00:00.000       20141225  */

 

/* Third results:

DatetimeCol                   DateCol

2014-12-26 00:00:00.000       20141225  */

------------

-- SQL month sequence - SQL date sequence generation with table variable

-- SQL Server cast string to datetime - SQL Server cast datetime to string

-- SQL Server insert default values method

DECLARE @Sequence table (Sequence int identity(1,1))

DECLARE @i int; SET @i = 0

DECLARE @StartDate datetime; 

SET @StartDate = CAST(CONVERT(varchar, year(getdate()))+

                 RIGHT(\'0\'+convert(varchar,month(getdate())),2) + \'01\' AS DATETIME)

WHILE ( @i < 120)

BEGIN

      INSERT @Sequence DEFAULT VALUES

      SET @i = @i + 1

END 

SELECT MonthSequence = CAST(DATEADD(month, Sequence,@StartDate) AS varchar) 

FROM @Sequence

GO

/* Partial results:

MonthSequence

Jan  1 2012 12:00AM

Feb  1 2012 12:00AM

Mar  1 2012 12:00AM

Apr  1 2012 12:00AM

*/

------------

 

------------

-- SQL Server Server datetime internal storage
-- SQL Server datetime formats 

------------

-- SQL Server datetime to hex 

SELECT Now=CURRENT_TIMESTAMP, HexNow=CAST(CURRENT_TIMESTAMP AS BINARY(8)) 

/* Results

 

Now                     HexNow

2009-01-02 17:35:59.297 0x00009B850122092D

*/

-- SQL Server date part - left 4 bytes - Days since 1900-01-01

SELECT Now=DATEADD(DAY, CONVERT(INT, 0x00009B85), \'19000101\')

GO

-- Result: 2009-01-02 00:00:00.000

 

-- SQL time part - right 4 bytes - milliseconds since midnight 

-- 1000/300 is an adjustment factor

-- SQL dateadd to Midnight

SELECT Now=DATEADD(MS, (1000.0/300)* CONVERT(BIGINT, 0x0122092D), \'2009-01-02\')

GO

-- Result: 2009-01-02 17:35:59.290

------------

------------

-- String date and datetime date&time columns usage
-- SQL Server datetime formats in tables

------------

USE tempdb;

SET NOCOUNT ON;

-- SQL Server select into table create

SELECT TOP (5) 

      FullName=convert(nvarchar(50),FirstName+\' \'+LastName), 

      BirthDate = CONVERT(char(8), BirthDate,112), 

      ModifiedDate = getdate()

INTO Employee

FROM AdventureWorks.HumanResources.Employee e

INNER JOIN AdventureWorks.Person.Contact c

ON c.ContactID = e.ContactID

ORDER BY EmployeeID

GO

-- SQL Server alter table

ALTER TABLE Employee ALTER COLUMN FullName nvarchar(50) NOT NULL

GO

ALTER TABLE Employee 

ADD CONSTRAINT [PK_Employee] PRIMARY KEY (FullName )

GO

/* Results 

 

Table definition for the Employee table

Note: BirthDate is string date (only)

 

CREATE TABLE dbo.Employee(

      FullName nvarchar(50) NOT NULL PRIMARY KEY,

      BirthDate char(8) NULL,

      ModifiedDate datetime NOT NULL

      )

*/

SELECT * FROM Employee ORDER BY FullName

GO

/* Results

FullName                BirthDate   ModifiedDate

Guy Gilbert             19720515    2009-01-03 10:10:19.217

Kevin Brown             19770603    2009-01-03 10:10:19.217

Rob Walters             19650123    2009-01-03 10:10:19.217

Roberto Tamburello      19641213    2009-01-03 10:10:19.217

Thierry D\'Hers          19490829    2009-01-03 10:10:19.217

*/

 

-- SQL Server age

SELECT FullName, Age = DATEDIFF(YEAR, BirthDate, GETDATE()),

       RowMaintenanceDate = CAST (ModifiedDate AS varchar)

FROM Employee ORDER BY FullName 

GO

/* Results 

FullName                Age   RowMaintenanceDate

Guy Gilbert             37    Jan  3 2009 10:10AM

Kevin Brown             32    Jan  3 2009 10:10AM

Rob Walters             44    Jan  3 2009 10:10AM

Roberto Tamburello      45    Jan  3 2009 10:10AM

Thierry D\'Hers          60    Jan  3 2009 10:10AM

*/

 

-- SQL Server age of Rob Walters on specific dates

-- SQL Server string to datetime implicit conversion with DATEADD

SELECT AGE50DATE = DATEADD(YY, 50, \'19650123\')

GO

-- Result: 2015-01-23 00:00:00.000

 

-- SQL Server datetime to string, Italian format for ModifiedDate

-- SQL Server string to datetime implicit conversion with DATEDIFF

SELECT FullName,

         AgeDEC31 = DATEDIFF(YEAR, BirthDate, \'20141231\'), 

         AgeJAN01 = DATEDIFF(YEAR, BirthDate, \'20150101\'),

         AgeJAN23 = DATEDIFF(YEAR, BirthDate, \'20150123\'),

         AgeJAN24 = DATEDIFF(YEAR, BirthDate, \'20150124\'),

       ModDate = CONVERT(varchar, ModifiedDate, 105)

FROM Employee 

WHERE FullName = \'Rob Walters\'

ORDER BY FullName 

GO

/* Results

Important Note: age increments on Jan 1 (not as commonly calculated)

 

FullName    AgeDEC31    AgeJAN01    AgeJAN23    AgeJAN24    ModDate

Rob Walters 49          50          50          50          03-01-2009

*/

 

------------

-- SQL combine integer date & time into datetime 

------------

-- Datetime format sql 

-- SQL stuff

DECLARE @DateTimeAsINT TABLE ( ID int identity(1,1) primary key, 

   DateAsINT int, 

   TimeAsINT int 

) 

-- NOTE: leading zeroes in time is for readability only!  

INSERT @DateTimeAsINT (DateAsINT, TimeAsINT) VALUES (20121023, 235959)   

INSERT @DateTimeAsINT (DateAsINT, TimeAsINT) VALUES (20121023, 010204)   

INSERT @DateTimeAsINT (DateAsINT, TimeAsINT) VALUES (20121023, 002350)

INSERT @DateTimeAsINT (DateAsINT, TimeAsINT) VALUES (20121023, 000244)   

INSERT @DateTimeAsINT (DateAsINT, TimeAsINT) VALUES (20121023, 000050)   

INSERT @DateTimeAsINT (DateAsINT, TimeAsINT) VALUES (20121023, 000006)   

 

SELECT DateAsINT, TimeAsINT, 

 CONVERT(datetime, CONVERT(varchar(8), DateAsINT) + \' \'+

 STUFF(STUFF ( RIGHT(REPLICATE(\'0\', 6) + CONVERT(varchar(6), TimeAsINT), 6),

                  3, 0, \':\'), 6, 0, \':\')) AS DateTimeValue 

FROM   @DateTimeAsINT  

ORDER BY ID

GO

/* Results 

DateAsINT   TimeAsINT   DateTimeValue

20121023    235959      2012-10-23 23:59:59.000

20121023    10204       2012-10-23 01:02:04.000

20121023    2350        2012-10-23 00:23:50.000

20121023    244         2012-10-23 00:02:44.000

20121023    50          2012-10-23 00:00:50.000

20121023    6           2012-10-23 00:00:06.000

*/

------------

 

-- SQL Server string to datetime, implicit conversion with assignment

UPDATE Employee SET ModifiedDate = \'20150123\'

WHERE FullName = \'Rob Walters\'

GO

SELECT ModifiedDate FROM Employee WHERE FullName = \'Rob Walters\'

GO

-- Result: 2015-01-23 00:00:00.000

 

/* SQL string date, assemble string date from datetime parts  */

-- SQL Server cast string to datetime - sql convert string date 

-- SQL Server number to varchar conversion

-- SQL Server leading zeroes for month and day

-- SQL Server right string function

UPDATE Employee SET BirthDate = 

      CONVERT(char(4),YEAR(CAST(\'1965-01-23\' as DATETIME)))+

      RIGHT(\'0\'+CONVERT(varchar,MONTH(CAST(\'1965-01-23\' as DATETIME))),2)+

      RIGHT(\'0\'+CONVERT(varchar,DAY(CAST(\'1965-01-23\' as DATETIME))),2)

      WHERE FullName = \'Rob Walters\'

GO

SELECT BirthDate FROM Employee WHERE FullName = \'Rob Walters\'

GO

-- Result: 19650123

 

-- Perform cleanup action

DROP TABLE Employee

-- SQL nocount

SET NOCOUNT OFF;

GO

------------

------------

-- sql isdate function

------------

USE tempdb; 

-- sql newid - random sort

SELECT top(3) SalesOrderID, 

stringOrderDate = CAST (OrderDate AS varchar)

INTO DateValidation

FROM AdventureWorks.Sales.SalesOrderHeader

ORDER BY NEWID()

GO

SELECT * FROM DateValidation

/* Results

SalesOrderID      stringOrderDate

56720             Oct 26 2003 12:00AM

73737             Jun 25 2004 12:00AM

70573             May 14 2004 12:00AM

*/

-- SQL update with top

UPDATE TOP(1) DateValidation 

SET stringOrderDate = \'Apb 29 2004 12:00AM\'

GO

-- SQL string to datetime fails without validation

SELECT SalesOrderID, OrderDate = CAST (stringOrderDate as datetime)

FROM DateValidation

GO

/* Msg 242, Level 16, State 3, Line 1

The conversion of a varchar data type to a datetime data type resulted in an 

out-of-range value.

*/

-- sql isdate - filter for valid dates

SELECT SalesOrderID, OrderDate = CAST (stringOrderDate as datetime)

FROM DateValidation

WHERE ISDATE(stringOrderDate) = 1

GO

/* Results

SalesOrderID      OrderDate

73737             2004-06-25 00:00:00.000

70573             2004-05-14 00:00:00.000

*/

-- SQL drop table

DROP TABLE DateValidation

Go

 

------------

-- SELECT between two specified dates - assumption TIME part is 00:00:00.000 

------------

-- SQL datetime between

-- SQL select between two dates

SELECT EmployeeID, RateChangeDate

FROM AdventureWorks.HumanResources.EmployeePayHistory

WHERE RateChangeDate >= \'1997-11-01\' AND 

      RateChangeDate < DATEADD(dd,1,\'1998-01-05\')

GO

/* Results

EmployeeID  RateChangeDate

3           1997-12-12 00:00:00.000

4           1998-01-05 00:00:00.000

*/

 

/* Equivalent to

 

-- SQL datetime range

SELECT EmployeeID, RateChangeDate

FROM AdventureWorks.HumanResources.EmployeePayHistory

WHERE RateChangeDate >= \'1997-11-01 00:00:00\' AND  

      RateChangeDate <  \'1998-01-06 00:00:00\'

GO

*/

------------

-- SQL datetime language setting 

-- SQL Nondeterministic function usage - result varies with language settings

SET LANGUAGE \'us_english\';  –– Jan 12 2015 12:00AM  

SELECT US = convert(VARCHAR,convert(DATETIME,\'01/12/2015\')); 

SET LANGUAGE \'British\';     –– Dec  1 2015 12:00AM  

SELECT UK = convert(VARCHAR,convert(DATETIME,\'01/12/2015\')); 

SET LANGUAGE \'German\';      –– Dez  1 2015 12:00AM  

SET LANGUAGE \'Deutsch\';     –– Dez  1 2015 12:00AM  

SELECT Germany = convert(VARCHAR,convert(DATETIME,\'01/12/2015\')); 

SET LANGUAGE \'French\';      –– déc  1 2015 12:00AM  

SELECT France = convert(VARCHAR,convert(DATETIME,\'01/12/2015\')); 

SET LANGUAGE \'Spanish\';     –– Dic  1 2015 12:00AM  

SELECT Spain = convert(VARCHAR,convert(DATETIME,\'01/12/2015\')); 

SET LANGUAGE \'Hungarian\';   –– jan 12 2015 12:00AM  

SELECT Hungary = convert(VARCHAR,convert(DATETIME,\'01/12/2015\')); 

SET LANGUAGE \'us_english\'; 

GO
------------

-- SQL Server 2008 T-SQL find next Monday for a given date

DECLARE @DateTime DATETIME = \'2012-12-31\'

SELECT NextMondaysDate=DATEADD(dd,(DATEDIFF(dd, 0, @DateTime) / 7 * 7) + 7, 0),

WeekDayName=DATENAME(dw,DATEADD(dd,(DATEDIFF(dd, 0, @DateTime) / 7 * 7) + 7, 0));

/*

NextMondaysDate         WeekDayName

2013-01-07 00:00:00.000 Monday

*/

------------

------------

-- Function for Monday dates calculation

------------

USE AdventureWorks2008;

GO 

-- SQL user-defined function

-- SQL scalar function - UDF

CREATE FUNCTION fnMondayDate 

               (@Year          INT, 

                @Month         INT, 

                @MondayOrdinal INT) 

RETURNS DATETIME 

AS 

 BEGIN 

    DECLARE  @FirstDayOfMonth CHAR(10), 

             @SeedDate        CHAR(10) 

     

    SET @FirstDayOfMonth = convert(VARCHAR,@Year) + \'-\' + convert(VARCHAR,@Month) + \'-01\' 

    SET @SeedDate = \'1900-01-01\' 

     

    RETURN DATEADD(DD,DATEDIFF(DD,@SeedDate,DATEADD(DD,(@MondayOrdinal * 7) - 1,

                  @FirstDayOfMonth)) / 7 * 7,  @SeedDate) 

 END 

GO 

 

 

版权声明:本文为onmyway20xx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/onmyway20xx/articles/3626711.html