SQL sorgularında tarihlerden hafta no yu çekmek. Hafta başlangıcı pazartesi olacak şekilde.

Datepart fonksiyonu ile tarih bilgisi içeren bir alanın, gününü, ayını, yılını vs. almak mümkün. Hatta week parametresi ile yılın kaçıncı haftası olduğunu almak da mümkün. Ancak bu hafta bilgisi hafta başını Pazar kabul ederek veriyor. Hafta başını pazartesi olarak hesaplaması için isowk parametresi kullanılmalı.

 

SELECT A.MATERIAL,A.VOPTIONS,B.OUTPUT,B.CONFIRMDATE,YEAR(B.CONFIRMDATE) AS YIL,MONTH(B.CONFIRMDATE) AS AY
,DATEPART(isowk,B.CONFIRMDATE) AS HAFTA
FROM MAC2012..IASPRDORDER A WITH (NOLOCK),MAC2012..IASPRDCONF B WITH (NOLOCK)
WHERE A.CLIENT=’00’ AND A.COMPANY=’01’
AND A.PLANT=’01’ AND A.POTYPE=’OI’
AND B.CLIENT=A.CLIENT AND B.COMPANY=A.COMPANY AND B.PLANT=A.PLANT AND B.POTYPE=A.POTYPE AND B.PRDORDER=A.PRDORDER
AND (A.MATERIAL NOT LIKE ‘%P’ OR A.MATERIAL NOT LIKE ‘%V’ OR A.MATERIAL NOT LIKE ‘%W’ OR A.MATERIAL NOT LIKE ‘%R’)
AND CONFIRMDATE>=’2012-01-01 00:00:00.000′
AND CONFIRMDATE<‘2013-01-01 00:00:00.000’

SQL new line ve carriage return durumu

SQL tablolarına excel veya txt gibi farklı biçimli dosyalardan veri aktardığınızda verilerle birlikte istenmeyen boşluk satır başı enter karakterleri de gelir. Bunların tespiti ve silinmesi gerekir.

DECLARE @NewLine char(2)
SET @NewLine=char(13)+char(10)

SELECT *
FROM PNTFICRONDIGERGR
WHERE CHARINDEX(@NewLine,[ISMERKEZI]) > 0

Update PNTFICRONDIGERGR
Set    [ISMERKEZI] = replace([ISMERKEZI], @NewLine, ”);

SELECT * FROM PNTFICRONDIGERGR

SQL NULL dönen sonuçların COALESCE ile kontrolü

IS NULL veya IS NOT NULL a alternatif olarak COALESCE kullanımı.

SELECT A.MACHINEID, A.MACHINECODE, A.STARTTIME,  CASE WHEN A.ENDTIME IS NULL THEN A.CANCELTIME 
ELSE A.ENDTIME END AS ENDTIME,
          A.JOBORDER, A.OPRNAME, A.FABRIC_WEIGHT, B.MATERIAL,
                 C.STEXT, A.PROGRAMNOLIST, D.USERNAME + ' ' + D.USERLASTNAME
,D.ACTIVITYDATE AS OPRNAME2 FROM   TELESKOP.OMUR.dbo.BADATA AS A  INNER JOIN PNTFSARJ AS B ON 
 A.JOBORDER = B.PROJECT INNER JOIN IASVAROPTIONX AS C ON  
SUBSTRING( B.VOPTIONS ,  10 ,   3 ) = C.OPTIONKEY AND ( C.VARIANTKEY = 'L' )  
                 LEFT OUTER JOIN VW_TELESKOP_KAZAN_GC_OPERATOR AS D WITH ( NOLOCK ) ON 
                  D.ACTIVITYDATE <= CASE WHEN  COALESCE( A.ENDTIME , 0)=0 THEN A.CANCELTIME 
ELSE A.ENDTIME  END 
AND D.ACTIVITYDATE2 >= CASE WHEN COALESCE(A.ENDTIME , 0)=0 THEN A.CANCELTIME ELSE A.ENDTIME END
AND A.MACHINEID = D.MACHINEID   WHERE (A.JOBORDER LIKE '12120706' ) 
AND (A.STARTTIME >= '12.10.2012 00:00:00' ) AND (A.STARTTIME <= '12.17.2012 15:34:00' ) 
AND (A.MACHINEID LIKE '%' ) AND (A.OPRNAME LIKE '%' ) 
GROUP BY A.MACHINEID, A.MACHINECODE, A.STARTTIME, A.ENDTIME, A.JOBORDER, A.OPRNAME
, A.FABRIC_WEIGHT, B.MATERIAL, C.STEXT, A.PROGRAMNOLIST, D.USERNAME, D.USERLASTNAME,A.CANCELTIME
,D.ACTIVITYDATE 
ORDER BY A.STARTTIME

SQL WHERE CASE kullanımı

WHERE koşulu içinde CASE WHEN kullanımı:

SELECT     TOP (100) PERCENT A.INVDOCTYPE, A.INVDOCNUM, A.DOCDATE
, A.MATERIAL, A.PROJECT, A.QUANTITY, A.QUNIT, A.WAREHOUSE
, A.STOCKPLACE,A.CONFIRMATION, A.CONFIRMPOS
, B.WAREHOUSE AS WAREHOUSE2, B.STOCKPLACE AS STOCKPLACE2, C.CUSTOMER
, A.BATCHNUM, A.QPOSTWAY
FROM dbo.IASINVITEM AS A WITH (NOLOCK) LEFT OUTER JOIN
     dbo.IASINVITEM AS B WITH (NOLOCK) ON A.CLIENT = B.CLIENT 
     AND A.COMPANY = B.COMPANY AND A.INVDOCTYPE = B.INVDOCTYPE AND 
     A.INVDOCNUM = B.INVDOCNUM AND 
     B.INVDOCITEM = 
(CASE WHEN A.QPOSTWAY = 1 THEN A.INVDOCITEM + 1 ELSE A.INVDOCITEM - 1 END) 
AND B.ISCANCELED = 0 AND B.QPOSTWAY <> A.QPOSTWAY LEFT OUTER JOIN
dbo.PNTFBATCHNUM AS C WITH (NOLOCK) 
ON CONVERT(VARCHAR, A.CONFIRMATION) + CONVERT(VARCHAR, A.CONFIRMPOS) = C.BATCHNUM
WHERE (A.CLIENT = '00') AND (A.COMPANY = '01') AND (A.WAREHOUSE LIKE 'IP_') 
AND (A.STOCKPLACE LIKE '___%') AND (A.ISCANCELED = 0)
ORDER BY A.DOCDATE, A.QPOSTWAY, A.WAREHOUSE, A.STOCKPLACE, A.MATERIAL