Pagine

domenica 26 febbraio 2012

SQL Server 2012 : Nuove funzioni T-SQL

SQL server 2012 ha introdotto molte nuove features rispetto alla versione precedente.
Nei post SQL Server 2012 FileTable e La paginazione dei dati in SQL Server 2008 e con la CTP3 di denali ho brevemente descritto due nuove funzionalità estremamente interessanti della nuova versione..... Ovviamente le "innovazioni" non si fermano qui.
Vediamo allora altre nuove funzionalità di SQL Server 2012.

1. Concatenazione di stringhe con CONCAT
Grazie alla funzione CONCAT possiamo concatenare stringhe senza preoccuparci di eventuali NULL.
--SQL 2000, 2005,2008,2008R2
Select 'Hello ' + ' world ' + null

--SQL 2012
select concat('Hello ',' world', null)



















2. Selezione di un valore da una lista con CHOOSE
Immaginate di avere una lista di valori e di voler scegliere un determinato item conoscendone la posizione nella lista. La funzione CHOOSE implementa esattamente tutto questo.

Select choose(3,'A','B','C','D','E')












3. Selezione di valori con IIF

La funzione IIF consente di selezionare il valore da utilizzare in base ad una condizione. Nelle edizioni precedenti era necessario utilizzare il CASE.

--SQL 2005,2008,2008R2
Declare @val1 tinyint = 2
Declare @val2 tinyint = 1
Select Case When @val1 > @val2 then 'Return Val1'
   else 'Return Val2'
  End
GO
--SQL 2012
Declare @val1 tinyint = 2
Declare @val2 tinyint = 1
Select IIF(@val1 > @val2,'Return Val1','Return Val2')
Go





4. Conversione di valori utilizzando TRY_CONVERT
La funzione TRY_CONVERT tenta di convertire il valore passato sul tipo specificato. Se la conversione va a buon fine restituisce il valore nel nuovo formato, se fallisce NULL

--SQL 2005,2008,2008R2
Declare @val1 varchar(12) = 'string value'
begin try
 
 Select cast(@val1 as tinyint)
 Select 'Cast Succeeded'

end try
begin catch

 Select ERROR_NUMBER(),ERROR_MESSAGE()
 Select 'Cast Failed'

end catch
GO
--SQL 2012
Declare @val1 varchar(12) = 'string value' --'1'
Select TRY_CONVERT(tinyint,@val1)
Select IIF(TRY_CONVERT(tinyint,@val1)is null,'Cast Failed', 'Cast Succeeded')
























5. Conversione di valori utilizzando TRY_PARSE
La funzione TRY_PARSE tenta di convertire il valore passato sul tipo specificato. Se la conversione va a buon fine restituisce il valore nel nuovo formato, se fallisce NULL. Rispetto alla TRY_CONVERT consente di specificare il parametro culture

Select TRY_PARSE('31/12/2011' as date using 'it-IT')









6. Scoprire l'ultimo giorno del mese con la funzione EOMONTH
La funzione EOMONTH restituisce l'ultimo giorno del mese specificato.

--SQL 2005,2008,2008R2
Declare @date date = getdate()
declare @month varchar(2)
declare @year varchar(4)
Declare @firstdaymonth varchar(8)

Select @month = DATEPART(month,@date)
If LEN(@month)<2
 SET @month = '0' + @month

Select @year = DATEPART(year,@date)
Select @firstdaymonth = @year + @month + '01'
Select DATEADD(day,-1, DATEADD(month,1,@firstdaymonth))
GO

--SQL 2012
Select eomonth(getdate())
GO




















7. trasformare in una data 3 valori separati che rappresentano anno, mese giorno con DATEFROMPARTS
Dati anno, mese, giorno la funzione DATEFROMPARTS restituisce una data.
--SQL 2005,2008,2008R2
Declare @date date = getdate()
Declare @day varchar(2)
declare @month varchar(2)
declare @year varchar(4)

Select @month = DATEPART(month,@date)
If LEN(@month)<2
 SET @month = '0' + @month

Select @day = DATEPART(day,@date)
If LEN(@day)<2
 SET @day = '0' + @day

Select @year = DATEPART(year,@date)

Select convert(date, @year + @month + @day)
GO

--SQL 2012
Declare @date date = getdate()
Declare @day int = DATEPART(day,@date)
declare @month int = DATEPART(month,@date)
declare @year int = DATEPART(year,@date)

Select DATEFROMPARTS(@year,@month,@day)
GO





2 commenti:

  1. IIF non mi funziona col sql server 2012 dice funzione non riconosciuta

    RispondiElimina