Tímto scriptem lze z SQL serveru získat jaký den v týdnu je dané datum. V příkladu zjišťuji aktuální den.
Jelikož má SQL server v defaultu hodnotu, že první den v týdnu je neděle, musíme ošetřit tento stav viz.příklad 2. V příkladu 3 potom daný den pojmenujeme.

 

-- declarace proměnné datum a naplnění hodnotou akt.datum
DECLARE @Datum datetime
SET @Datum = getdate()
 
-- př.1: den v týdnu
SELECT DATEPART(dw,@Datum)
 
-- př.2: den v týdnu s ošetřením lokálního prostředí
SELECT (DATEPART(dw,@Datum)+@@DATEFIRST-2)%7+1
 
-- př.3: den v týdnu česky
SELECT CASE ((DATEPART(dw,@Datum)+@@DATEFIRST-2)%7+1)
WHEN 1 THEN 'Pondělí'
WHEN 2 THEN 'Úterý'
WHEN 3 THEN 'Středa'
WHEN 4 THEN 'Čtvrtek'
WHEN 5 THEN 'Pátek'
WHEN 6 THEN 'Sobota'
WHEN 7 THEN 'Neděle'
END

 

Výsledek:

V praxi narazíte na případ, kdy je třeba SQL scriptem zkopírovat popř.přesunout soubor z jednoho adresáře do jiného. Podobnou situaci jsem řešil v informačním systému, kdy jsem potřeboval určité soubory zkopírovat/přesunout do jiného adresáře. Pokud tedy nechcete psát nějaké pluginy a chcete to řešit SQL scriptem, jako já, můžete použít následující příklad. Vstupní proměnné jsou cesta k souboru vč.názvu souboru a cílový adresář.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DECLARE
@From nvarchar(200), 
@ToFolder nvarchar(200), 
@FileName nvarchar(50),
@SQL nvarchar(500)   
 
-- zdrojový soubor
SET @From = '\\server\data\old\test001.pdf'
-- cílový adresář
SET @ToFolder = '\\server\data\new\'
       
-- název souboru
SELECT @FileName = REVERSE(LEFT(REVERSE(@From),
                   CHARINDEX('\',REVERSE(@From),1)- 1))
 
SET  @sql = 'copy ' + @From + ' ' + @ToFolder + @FileName 
 
EXEC master.dbo.xp_cmdshell @SQL

 

 

Tímto scriptem vykopírujeme název souboru z celé cesty k souboru

1
2
3
4
5
DECLARE @PathFile varchar(255)
SET @PathFile = '\\SERVER\DATA\soubor20180220.txt'
 
SELECT FileName= REVERSE(LEFT(REVERSE(@PathFile),
                 CHARINDEX('\',REVERSE(@PathFile),1)- 1))

 

Výsledek

Někdy nastanou situace, kdy je třeba zjistit délku názvu souboru z celé cesty k souboru. 
To lze provést celkem jednoduše. Nejprve otočíme řetězec funkcí REVERSE a potom spočítáme pořadí prvního lomítka zleva (začátek názvu souboru) funkcí CHARINDEX a poté odečteme jeden znak.

1
2
3
4
DECLARE @PathFile varchar(255)
SET @PathFile = '\\SERVER\DATA\soubor20180220.txt'
 
SELECT CHARINDEX('\',REVERSE(@PathFile),1) -1 

 

Výsledek

 

 

 

Pomocí tohoto příkazu lze zjistit pořadí určitého znaku v řetězci.

V tomto příkladu zjistíme, kolikáté je první lomítko v řetězci za 10 znakem (počítáno zleva)

1
2
3
4
DECLARE @PathFile varchar(255)
SET @PathFile = '\\SERVER\DATA\soubor20180220.txt'
 
SELECT charindex('\',@PathFile,10)  

Výsledek 

 

 

Původně to měla být kategorie o cestách, které podniknu na svém starém kole-dědkovi. Pak se mě název zalíbil a říkám si, že jednou budu taky dědek, vlastně syna už na to mám dost velkýho, a tak nadčasově tuto kategorii nechám pojmenovanou takto. Takže zde nalezneš zápisky z cest. 

Zde je můj blog o SQL. Je to takový můj tahák.

Moje poznámky z instalací