How to split a column in SQL Server?

Today, one of my friend ask me: I have a column that contain different data and contains commas (delimiter character is comma), so could you split it into one specific column.

I want to show with picture what he wants.

He wanted to get second column, it means first data after first comma.

I show you how to transform this data in a test table.

create table ComplexData(
id int,
StringData varchar(250)

);
go

insert into ComplexData(id,StringData) values(1,'10000,Istanbul,20,0,Red')
insert into ComplexData(id,StringData) values(2,'30000,Ankara,30,1')
insert into ComplexData(id,StringData) values(3,'40000,Izmir,20,0,Red')
insert into ComplexData(id,StringData) values(4,'30000,Elazig,30,0')
insert into ComplexData(id,StringData) values(5,'10000,Bursa,20,0,Red')
insert into ComplexData(id,StringData) values(6,'30000,Adana,30,0')
insert into ComplexData(id,StringData) values(7,'40000,Kocaeli,20,1,Red')
insert into ComplexData(id,StringData) values(8,'30000,Ankara,40,1')
insert into ComplexData(id,StringData) values(9,'40000,Kocaeli,20,1,Red')
insert into ComplexData(id,StringData) values(10,'30000,Eskisehir,40,1,Blue')

After test data I should create a udf function.

-- =============================================
-- Author: Selcuk KILINC
-- Create date: 2021.10.08
-- Description: String Split
-- =============================================
CREATE or ALTER FUNCTION UDF_StringSplit
(
@stringParam varchar(250),
@splitChar varchar(2),
@whichSubStr int
)

RETURNS varchar(100)
AS
BEGIN
declare @tbl table(
id int identity(1,1),
SubStr varchar(100)
);

insert into @tbl(SubStr)
select value from string_split(@stringParam,@splitChar)

-- Return the result of the function
RETURN (select SubStr from @tbl where id=@whichSubStr)

END
GO

Then call the udf in the query:

select *,dbo.UDF_StringSplit(StringData,',',2) as City from ComplexData;

With the 3rd parameter you can split whatever you want. I tried to get second data from string above.

How to drop/delete/truncate all tables in a specific database?

First we need a test database and test tables


--- Create a test db
create database DUMMYDB;
go
---- create tables in test db
use DUMMYDB;
go
create table t1(id int);
go
create table t2(id int);
go
create table t3(id int);
go

if there is no foreign keys, you can execute one of follow queries (drop, delete or truncate)


use DUMMYDB;
go
exec sp_MSforeachtable "DROP TABLE ? PRINT '? dropped' " --- drop all tables in current db
exec sp_MSforeachtable "DELETE FROM ? PRINT '? deleted' " --- delete all tables in current db
exec sp_MSforeachtable "TRUNCATE TABLE ? PRINT '? truncated' " --- truncate all tables in current db

Basic Daily Monitoring Queries

use master;
go

— How to get instance name?

select @@SERVERNAME

— How to get SQL Server version?

select @@version

— How to show the full space percentage of the log files?

dbcc sqlperf(logspace)

— How to show free space on disks?

exec xp_fixeddrives

— How to get last restarted date of SQL Server?

select sqlserver_start_time from sys.dm_os_sys_info

— How to check databases size in SQL Server?

exec sp_helpdb

exec sp_helpdb 'AdventureWorks2014' ---> it returns details for spesific database

exec sp_databases --- alternative

— How to get blocking queries?

select * from sys.sysprocesses where blocked<>0

— List databases with state

select name,state_desc from sys.databases

— How to get all my databases last full, diff, tran backup info

select db_name,backup_type,backup_size_in_MB,
backup_start_date,backup_finish_date,is_copy_only,
physical_device_name,recovery_model_desc
from (
select d.database_id,
d.name as db_name,
case backup_types.Backup_Type
when 'D' then 'Full Backup'
when 'I' then 'Differential Backup'
when 'L' then 'Transaction Log Backup'
end as 'backup_type',
cast(bs.compressed_backup_size/1048576 as decimal(15,2)) as 'backup_size_in_MB',
bs.backup_start_date,
bs.backup_finish_date,
bs.is_copy_only,
bmf.physical_device_name,
d.recovery_model_desc,
row_number() over(partition by d.database_id,backup_types.Backup_Type order by bs.backup_start_date desc) as rwn
from sys.databases as d
cross join(
select 'D' as Backup_Type
union
select 'I'
union
select 'L'
) as backup_types
left join msdb.dbo.backupset as bs on (d.name=bs.database_name and backup_types.Backup_Type=bs.type)
left join msdb.dbo.backupmediafamily as bmf on bs.media_set_id=bmf.media_set_id
where isnull(bs.is_copy_only,0)=0 --- if you want to filter copy_only backups
) as tbl
where tbl.rwn=1
and tbl.database_id>4 --- eliminate system databases
order by tbl.database_id asc

— How to get all indexes on a spesific table in SQL Server?

-- exec sp_helpindex 'Table_Name'
exec sp_helpindex 'HumanResources.Department'

— How to list all indexes with last statistics updated date

SELECT OBJECT_NAME(object_id) as table_name,
name AS index_name,
STATS_DATE(object_id, index_id) AS StatsUpdated
FROM sys.indexes
order by StatsUpdated desc

Last Backup Dates

Following script lists last full, diff and transaction log backup dates and some useful details of all databases in an instance.

select db_name,backup_type,backup_size_in_MB,
backup_start_date,backup_finish_date,is_copy_only,
physical_device_name,recovery_model_desc
from (
select d.database_id,
d.name as db_name,
case backup_types.Backup_Type
when 'D' then 'Full Backup'
when 'I' then 'Differential Backup'
when 'L' then 'Transaction Log Backup'
end as 'backup_type',
cast(bs.compressed_backup_size/1048576 as decimal(15,2)) as 'backup_size_in_MB',
bs.backup_start_date,
bs.backup_finish_date,
bs.is_copy_only,
bmf.physical_device_name,
d.recovery_model_desc,
row_number() over(partition by d.database_id,backup_types.Backup_Type order by bs.backup_start_date desc) as rwn
from sys.databases as d
cross join(
select 'D' as Backup_Type
union
select 'I'
union
select 'L'
) as backup_types
left join msdb.dbo.backupset as bs on (d.name=bs.database_name and backup_types.Backup_Type=bs.type)
left join msdb.dbo.backupmediafamily as bmf on bs.media_set_id=bmf.media_set_id
where isnull(bs.is_copy_only,0)=0 --- if you want to filter copy_only backups
) as tbl
where tbl.rwn=1
and tbl.database_id>4 --- eliminate system databases
order by tbl.database_id asc

If you want to filter system databases and copy_only backups, mind the comments in the script.

You can notice the below result set some columns contain NULL. Does that mean there are no backups have been performed? May be. Please ensure that backup and restore history cleanup script has not been run recently in msdb database. Maybe later I will explain why do we need cleaning backup/restore history tables and how to clean up?

Lineer Cebir Soruları

Data Science kavramını duymaya başladıktan sonra Lineer Cebir’in ismini daha çok duymaya başladık. Bundan sonra lineer cebirle ilgili paylaşımlar yapmayı düşünüyorum. Sınav öncesinde çözülebilecek basit birkaç soru paylaşıyorum. Lineer cebirin ilk kısmı yok etme metodu, denklem sistemlerinin çözümü vs… Bir sonraki paylaşımda matrislere değinebilirim.

Çözümleri de pdf’de mevcut : linear algebra 1

 

Önermeler

Bir önerme, doğruyu veya yanlışlığı belirten bir cümledir (ikisini birden değil).

Aşağıdaki tüm bildirimsel cümleler önermedir.

1- Ankara Türkiye’nin başkentidir.

2-Atina Bulgaristan’ın başkentidir.

3- 1 + 2 = 3

4- 4+4=10

  1. ve 3. önermeler doğru 2. ve 4. önermeler yanlıştır.

Sorular:

Aşağıdaki tümcelerin önerme olup olmadığını değerlendirin.

1- Saat kaç?

2- Bu yazıyı dikkatlice oku.

3- x + 1 = 2

4- x + y = z

5- 2 + 3 = 5

6- 2 + 7 = 15

Cevaplar:

1- Bildirim tümcesi değil. Önerme değildir.

2- Bildirim tümcesi değil. Önerme değildir.

3- Doğru ya da yanlış diyemeyiz. Önerme değildir.

4- Doğru ya da yanlış diyemeyiz. Önerme değildir.

5- Önermedir.

6-Önermedir.

 

 

Graf Teorisi II

Bir önceki yazımda graflara giriş yaptık. Bu yazımda çift parçalı graflardan bahsedeceğim.

İki Parçalı Graflar (Bipartite Graphs)

Bir graf’ı oluşturan düğümleri iki farklı kümeye ayırabiliyorsak ve bu iki kümenin elemanlarından küme içerisindeki bir elemana gidilmiyorsa. Yani bütün kenarlar (edges) kümeler arasındaki elemanlar arasındaysa, bu graflara iki parçalı graf (bipartite graph) ismi verilir.

graf2

Şekil-1

G grafının noktalar kümesi matematikte V(G) olarak gösterilir. Şekil-1’deki örnekte V(G)={A,B,C,D,E}.  G grafının kenarları ise şunlardır : E(G)={{A, B}, {A, D}, {A, E}, {B, C}, {B, D}, {B, E}, {C, D}, {D, E}}. Şimdi artık G çizgesini (V(G), E(G)) ikilisi olarak gösterebiliriz.

X ve Y iki küme olsun. V(G)=X∪Y ve X∩Y=∅ şeklinde V(G)’yi iki ayrı kümede toplayabiliyorsak G grafı iki parçalı graftır deriz.

Örneğin yukarıdaki graf iki gruba ayrılmıyor ayırabilsek bile kendi içinde ilişki oluyor. Yani iki parçalı değildir.

graf3

Şekil-2

Örneğin Şekil-2’deki graf iki parçalı bir graftır çünkü görüldüğü gibi 2 ayrı kümeye ayırabildik ve küme  içerisindeki köşeler ilişkili değil ancak diğer kümedeki köşelerle ilişkilidir.

Graf Teorisi

Graf Teorisi I

Graflar, ayrık matematiğin çok popüler bir konusudur. Bunlar, nesnelerin sınırlı bir koleksiyonunu ve aralarındaki çiftli ilişkileri temsil eder. Örnek: Bir “arkadaşlık grafiği”, bize hangi gruptaki insanların arkadaş olduğunu söyler.

Grafları tanımlamak için, kümelerle ilgili birkaç temel şeyi bilmemiz gerekir.

Kümeler

Bir küme farklı nesnelerin iyi tanımlanmış sırasız bir koleksiyonudur. Bir kümeyi oluşturan nesneler herhangi bir şey olabilir: rakamlar, insanlar, alfabe harfleri vs…Kümedeki her eleman tam olarak bir kez oluşur.

Şöyle bir küme örneği belirleyebiliriz:

P = {Ali, Burak, Can}

Bu, {Burak, Ali, Can} ile aynıdır. Kümenin elemanları sırasızdır. Küme üyeliğini şu şekilde ifade ederiz:

set1

Ayrıca diğer kümelerden oluşan kümeleri ele alabiliriz. Örneğin, F kümesi, P içindeki insan çiftlerinin arkadaş olanlarını gösterebilir:

F = {{Ali, Burak}, {Ali, Can}}

Her seferinde büyük veya sonlu kümelerle çalışmamız gerekecek. Bu gibi durumlarda, tüm elemanları listelemek iyi bir seçenek değildir; bu nedenle, elemanların yerine getirmesi gereken bir yüklem tarafından bir gruba üyelik belirtiriz.

E = {n: n çift tam sayı}
= {n: k bir tam sayıdır, n = 2k}

Bazı kümeler standart adlara sahiptir, boş set için ø, tam sayılar için Z, doğalsayılar için N, gerçel sayılar için R gibi…

set3

Kardinalite (Nicelik): Kardinalite |A|, sonlu A kümesinin elemanlarının sayısıdır. Yukarıdaki örneklerde, |P| = 3, |F| = 2 ve |E| tanımsızdır çünkü E  kümesi sonsuzdur.

Kümeler arasındaki ilişkiler ve kümeler üzerinde işlemler: Diyelim ki A, B’nin alt kümesidir o halde A⊆B şeklinde ifade ederiz. Eğer A’nın her elemanı B’nin de bir elemanıysa A kapsanır B veya A, B’nin öz altkümesidir diye ifade ederiz.Gösterimi:A⊂B şeklinde olur. A, B’nin bir alt kümesidir fakat eşit değildirler.

Dikkat!: ⊆, ⊂, ∉ ifadelerini karıştırmayalım.

A ve B kümelerinin birleşimi (A∪B), A veya B’de bulunan şu elemanlardan oluşur:

(A∪B) = {x: x∈A veya x∈B}

A ve B kümelerinin kesişimi (A∩B), hem A’da hem B’de bulunan şu elemanlardan oluşur:

(A∩B) = {x:x∈A ve x∈B}

Eğer A∩B = Ø ise A ve B ayrık kümelerdir. Küme farkı (A-B) ise A kümesinde olup B’de olmayan elemanları kapsar.

A – B = {x: x∈A ve x∉B}

A kümesinin tümleyeni (A’) ise A kümesi dışındaki elemanları ifade eder.

A’={x:x∉A}

 Örneğin, tamsayılar hakkında konuşursak, çift sayılar kümesinin tümleyeni tek sayılar kümesidir.

Graflar

Basit bir graf bir çift kümedir (V,E) burada V boş olmayan sonlu bir kümedir. E ise V’nin iki elemanlı alt kümeleridir.

V (vertices) elemanları köşeler olarak adlandırılır; E (edges) elemanları kenarlar olarak adlandırılır.

Dikkat edin {v,v} kenar değildir. Çünkü {v,v} = {v}, V’nin 1 elemanlı bir altkümesidir.

Örnek: G = (V,E)

V = {a,b, c, d, e}
E = {{a, b}, {b, c}, {a, c}, {c, d}}

G grafı, 5 köşe 4 kenardan oluşur. Grafik küçük olduğunda, bu durumda olduğu gibi, diyagramını rahatlıkla çizebiliriz. Noktaların konumu ve kenar şekilleri önemli değildir.Grafın şekli Şekil-1’deki gibidir.

 

graf1Şekil-1

Eğer {u,v} bir kenarsa u köşesi v köşesine bitişiktir veya komşudur denilir. v köşesinin derecesi deg(v) v’nin komşu köşe sayıları kadardır. Örneğin G’de, a’nın ve b’nin derecesi 2, c’nin derecesi 3, d’nin derecesi 1 ve e’nin derecesi 0’dır.

Önsav: Tüm köşelerin derece toplamı kenar sayısının iki katına eşittir.

Gerçekten de G’nin 4 kenarı ve toplam derecesi 8’dir.