Sei sulla pagina 1di 39

T-SQL

Rediscovered with
SQL Server 2012
GO BIG!
Jacob Sebastian, SQL Server MVP
jacob@beyondrelational.com

Agenda

What is todays date?


GETDATE()

What is Tomorrows Date?


GETDATE()+ 1

Beginning of the Month?


SELECT CAST (
CAST(YEAR(GETDATE()) AS VARCHAR) + '-'
+ CAST(MONTH(GETDATE()) AS VARCHAR) + '-'
+ '01' AS DATE
)

Beginning of the Month?


SELECT CAST (
CAST(YEAR(GETDATE()) AS VARCHAR) + '-'
+ CAST(MONTH(GETDATE()) AS VARCHAR) + '-'
+ '01' SQL
AS DATE
Server
)
2012

SELECT CAST (
CONCAT
(
YEAR(GETDATE()),'-',MONTH(GETDATE()),'-','01'
) AS DATE
)

CONCAT() Function
SELECT
FirstName + ' ' +
MiddleName + ' ' +
LastName AS CustomerName
FROM Customers
SELECT
ISNULL(FirstName,'') + ' ' +
ISNULL(MiddleName,'') + ' ' +
ISNULL(LastName,'') AS CustomerName
FROM Customers
SELECT
CONCAT(FirstName, ' ', MiddleName, ' ', LastName)
AS CustomerName
FROM Customers

Beginning of the Month?


SQL
Server
2012

SELECT CAST (
CONCAT
(
YEAR(GETDATE()),'-',MONTH(GETDATE()),'-','01'
) AS DATE SQL
Server
)
2012

SELECT
DATEFROMPARTS(YEAR(GETDATE()),MONTH(GETDATE()),1)

End of the Month?


SELECT DATEFROMPARTS
(
YEAR(GETDATE()),
MONTH(GETDATE()) + 1,
1
)
SELECT DATEADD
(
D,
-1,
DATEFROMPARTS(
YEAR(GETDATE()), MONTH(GETDATE()) + 1, 1
)
)

End of the Month?


SELECT DATEADD
(
D, -1,
DATEFROMPARTS(
CASE WHEN MONTH(GETDATE()) < 12
THEN YEAR(GETDATE())
ELSE YEAR(GETDATE()) + 1
END,
CASE WHEN MONTH(GETDATE()) = 12 THEN 1
ELSE MONTH(GETDATE()) + 1
END, 1
)
)

End of the Month?


SELECT DATEADD
(
SQL Server
D, SQL
-1,Server
2012
DATEFROMPARTS(
2012
YEAR(GETDATE()) + IIF(MONTH(GETDATE()) < 12, 0, 1),
IIF(MONTH(GETDATE()) = 12, 1, MONTH(GETDATE()) + 1),
1
)
)

IIF() Function
SELECT
CustName,
CASE IsActive
WHEN 1 THEN 'Yes'
ELSE 'No'
END AS IsActive
FROM Customers
SELECT
CustName,
IIF(IsActive = 1, 'Yes', 'No') AS IsActive
FROM Customers

End of the Month?


SELECT DATEADD
(
D, -1,
DATEFROMPARTS(
YEAR(GETDATE()) + IIF(MONTH(GETDATE()) < 12, 0, 1),
IIF(MONTH(GETDATE()) = 12, 1, MONTH(GETDATE()) + 1),
1
)
)
SQL Server
2012

SELECT EOMONTH(GETDATE())

Format Date: 2011-01-01 12:30

PRINT CONVERT(VARCHAR, GETDATE(), 101) -- 03/13/2012

Format Date: 2011-01-01 12:30

PRINT CONVERT(VARCHAR, GETDATE(), 101) -- 03/13/2012


PRINT CONVERT(VARCHAR, GETDATE(), 102) -- 2012.03.13

Format Date: 2011-01-01 12:30


PRINT CONVERT(VARCHAR, GETDATE(), 101) -- 03/13/2012
PRINT CONVERT(VARCHAR, GETDATE(), 102) -- 2012.03.13
PRINT CONVERT(VARCHAR, GETDATE(), 103) -- 13/03/2012

Format Date: 2011-01-01 12:30


PRINT
PRINT
PRINT
PRINT

CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,

GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),

101)
102)
103)
104)

-----

03/13/2012
2012.03.13
13/03/2012
13.03.2012

Format Date: 2011-01-01 12:30


PRINT
PRINT
PRINT
PRINT
PRINT

CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,

GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),

101)
102)
103)
104)
105)

------

03/13/2012
2012.03.13
13/03/2012
13.03.2012
13-03-2012

Format Date: 2011-01-01 12:30


PRINT
PRINT
PRINT
PRINT
PRINT
PRINT

CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,

GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),

101)
102)
103)
104)
105)
106)

-------

03/13/2012
2012.03.13
13/03/2012
13.03.2012
13-03-2012
13 Mar 2012

Format Date: 2011-01-01 12:30


PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT

CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,

GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),

101)
102)
103)
104)
105)
106)
107)

--------

03/13/2012
2012.03.13
13/03/2012
13.03.2012
13-03-2012
13 Mar 2012
Mar 13, 2012

Format Date: 2011-01-01 12:30


PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT

CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,

GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),

101)
102)
103)
104)
105)
106)
107)
108)

---------

03/13/2012
2012.03.13
13/03/2012
13.03.2012
13-03-2012
13 Mar 2012
Mar 13, 2012
20:33:13

Format Date: 2011-01-01 12:30


PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT
PRINT

CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,
CONVERT(VARCHAR,

GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),
GETDATE(),

101)
102)
103)
104)
105)
106)
107)
108)

---------

03/13/2012
2012.03.13
13/03/2012
13.03.2012
13-03-2012
13 Mar 2012
Mar 13, 2012
20:33:13

PRINT
SQL
REPLACE(CONVERT(VARCHAR,
GETDATE(), 102), '.', '-')
Server
+ ' ' + 2012
LEFT(CONVERT(VARCHAR, GETDATE(), 108), 5)
PRINT FORMAT(GETDATE(), 'yyyy-MM-dd hh:mm')

FORMAT() Function
PRINT FORMAT(
GETDATE(),
'"-- Demonstrated On" yyyy-MM-dd "at" hh:mm')
-- Demonstrated on 2012-03-13 at 09:03

PRINT FORMAT(GETDATE(), 'yyyy-MM-ddThh:mm:ssZ')


2012-03-13T09:03:03Z

Error Handling

Pagination

Previous, Next, First, Last

PARSE()
DECLARE @dt DATE = '03/05/2012'
SELECT @dt
-- March 5, 2012
-- May 3, 2012

DECLARE @dt DATE = PARSE('03/05/2012' AS DATE USING 'en-US')

-- March 5, 2012
DECLARE @dt DATE = PARSE('03/05/2012' AS DATE USING 'en-US')

-- May 3, 2012

TRY_PARSE()
DECLARE @str CHAR(10) = '15/03/2012' - Loaded from a file
DECLARE @dt DATE = PARSE(@str AS DATE USING 'en-US')

DECLARE @str CHAR(10) = '15/03/2012' - Loaded from a file


SELECT TRY_PARSE(@str AS DATE USING 'en-US')

-- NULL
SELECT TRY_PARSE(@str AS DATE USING 'en-GB')

-- March 15, 2012

TRY_CONVERT()
DECLARE @x VARCHAR(100) = '<Students name="jacob"></students>'
SELECT CAST(@x as xml).value('(/Students/@name)[1]', 'VARCHAR(100)')

DECLARE @x VARCHAR(100) = '<Students name="jacob"></students>'


SELECT
TRY_CONVERT(xml, @x).value('(/Students/@name)[1]', 'VARCHAR(100)')

Accessing Previous and Next


Rows

Accessing Previous and Next


Rows
ID

Time

Type

2011-01-01 10:00:00

IN

2011-01-01 18:00:00

OUT

2011-01-02 10:00:00

IN

2011-01-01 10:05:00

IN

2011-01-01 19:00:00

OUT

2011-01-01 11:00:00

IN

2011-01-01 17:00:00

OUT

Accessing Previous and Next


Rows
ID

Time

Type

2011-01-01 10:00:00

IN

2011-01-01 18:00:00

OUT

2011-01-02 10:00:00

IN

2011-01-01 10:05:00

IN

2011-01-01 19:00:00

OUT

2011-01-01 11:00:00

IN

2011-01-01 17:00:00

OUT

Accessing Previous and Next


Rows
Row#

ID

Time

Type

2011-01-01 10:00:00

IN

2011-01-01 18:00:00

OUT

2011-01-02 10:00:00

IN

2011-01-01 10:05:00

IN

2011-01-01 19:00:00

OUT

2011-01-01 11:00:00

IN

2011-01-01 17:00:00

OUT

Accessing Previous and Next


Rows
Row

ID

Time

Type

Row

ID

Time

Type

2011-01-01 10:00:00 IN

2011-01-01 10:00:00 IN

2011-01-01 18:00:00 OUT

2011-01-01 18:00:00 OUT

2011-01-02 10:00:00 IN

2011-01-02 10:00:00 IN

2011-01-01 10:05:00 IN

2011-01-01 10:05:00 IN

2011-01-01 19:00:00 OUT

2011-01-01 19:00:00 OUT

2011-01-01 11:00:00 IN

2011-01-01 11:00:00 IN

2011-01-01 17:00:00 OUT

2011-01-01 17:00:00 OUT

Accessing Previous and Next


Rows

Questions

Thank You

Resources
Developers

http://msdn.microsoft.com/

msdnindia

@msdnindia

Infrastructure Professionals

http://technet.micorsoft.com/

technetindia

@technetindia

2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or
may be registered trademarks and/or trademarks in the US and/or other countries. The information herein is for informational purposes
only and represents the current view of Microsoft Corporation as of the date of this presentation.
Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of
Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation.
MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS
PRESENTATION.

Potrebbero piacerti anche