Chuyển dữ liệu dạng text (Char or nvarchar) sang datetime

Bạn muốn chuyển đổi dữ liệu từ text (Char or nvarchar) sang datetime. Bạn có thể xem hàm sau đây. Tôi viết hàm chuyển dạng text (dd/MM/yyyy) còn các định dạng khác bạn có thể Alter hàm để dùng cho đúng mục đích.

 

--Input: char/varchar
--Output: datetime

CREATE FUNCTION dbo.ChuyenTextSangDateTime
(@mNgay nvarchar(10))  
RETURNS datetime
AS  

BEGIN 
    DECLARE @mDate   datetime
    if (len(@mNgay)>=8)--đủ ngày tháng năm
    Set @mDate=  cast(substring(@mNgay,
    CHARINDEX('/',@mNgay,0)+1,
    CHARINDEX('/',@mNgay, CHARINDEX('/',@mNgay,0)+1)
    -CHARINDEX('/',@mNgay,0)-1 )+'/'+
    substring( @mNgay,0,CHARINDEX('/',@mNgay,0))+'/'+
    substring(@mNgay, 
    CHARINDEX('/',@mNgay,CHARINDEX('/',@mNgay,0)+1)+1 , 
    len(@mNgay)-CHARINDEX('/',@mNgay,CHARINDEX('/',@mNgay,0)+1))
    as datetime)
    else
    if (len(@mNgay)>4 AND len(@mNgay)<8)--có tháng năm
    Set @mDate=cast(substring(@mNgay,0,CHARINDEX('/',@mNgay,0))+'/01/'+
        substring(@mNgay, CHARINDEX('/',@mNgay,0)+1, 
        len(@mNgay)-CHARINDEX('/',@mNgay,0))
               as datetime)
    else-- có năm
        Set @mDate= cast( '01/01/'+ @mNgay  as datetime)

    return @mDate
END

Bạn có thể chạy thử hàm trên như sau:

SELECT dbo.ChuyenTextSangDateTime ('22/08/2009')

Chúc các bạn thành công!

 

Convert Font từ TCVN3 sang Unicode

Vấn đề chuyển đổi font chữ trong SQL đã được nhắc đến nhiều, và nếu bạn là lập trình viên và đã làm nhiều dự án chắc là bạn đã từng gặp vấn đề này: Chuyển font từ TCVN3 sang Unicode.

Tôi xin giới thiệu các bạn hàm convert sau:

CREATE FUNCTION dbo.funConvertToUnicode
 (@strInput VARCHAR(4000)  )
RETURNS NVARCHAR(4000) AS  
BEGIN 
    DECLARE @strOutput NVARCHAR(4000)
    DECLARE @TCVN CHAR(671)
    DECLARE @UNICODE CHAR(671)
    SET @TCVN = 
    ',184, 181, 182, 183, 185, 168, 190, 187, 188, 189, 198,
     169, 202, 199, 200, 201, 203, 208, 204, 206, 207, 209, 
     170, 213, 210, 211, 212, 214, 221, 215, 216, 220, 222,
     227, 223, 225, 226, 228, 171, 232, 229, 230, 231, 233, 
     172, 237, 234, 235, 236, 238, 243, 239, 241, 242, 244, 
     173, 248, 245, 246, 247, 249, 253, 250, 251, 252, 254, 
     174, 184, 181, 182, 183, 185, 161, 190, 187, 188, 189, 198, 
     162, 202, 199, 200, 201, 203, 208, 204, 206, 207, 209, 163, 
     213, 210, 211, 212, 214, 221, 215, 216, 220, 222, 227, 223, 
     225, 226, 228, 164, 232, 229, 230, 231, 233, 165, 237, 234, 
     235, 236, 238, 243, 239, 241, 242, 244, 166, 248, 245, 246, 
     247, 249, 253, 250, 251, 252, 254, 167, '

    SET @UNICODE = 
    ',225, 224, 7843,227, 7841,259, 7855,7857,7859,7861,7863,
    226, 7845,7847,7849,7851,7853,233, 232, 7867,7869,7865,234, 
    7871,7873,7875,7877,7879,237, 236, 7881,297, 7883,243, 242, 
    7887,245, 7885,244, 7889,7891,7893,7895,7897,417, 7899,7901,
    7903,7905,7907,250, 249, 7911,361, 7909,432, 7913,7915,7917,
    7919,7921,253, 7923,7927,7929,7925,273, 193, 192, 7842,195, 
    7840,258, 7854,7856,7858,7860,7862,194, 7844,7846,7848,7850,
    7852,201, 200, 7866,7868,7864,202, 7870,7872,7874,7876,7878,
    205, 204, 7880,296, 7882,211, 210, 7886,213, 7884,212, 7888,
    7890,7892,7894,7896,416, 7898,7900,7902,7904,7906,218, 217, 
    7910,360, 7908,431, 7912,7914,7916,7918,7920,221, 7922,
    7926,7928,7924,272, '

    IF @strInput IS NULL RETURN ''
    IF @strInput = '' RETURN ''
    DECLARE @COUNTER INT
    DECLARE @POSITION INT
    SET @COUNTER = 1
    SET @strOutput = ''
    WHILE (@COUNTER <= LEN(@strInput))
    BEGIN
    SET @POSITION = CHARINDEX(','+CONVERT(CHAR(4),
        ASCII(SUBSTRING(@strInput, @COUNTER, 1)))+',', @TCVN, 1)
    IF @POSITION > 0
    SET @strOutput = @strOutput + 
        NCHAR(CONVERT(INT,SUBSTRING(@UNICODE, @POSITION+1, 4)))
    ELSE
    SET @strOutput = @strOutput + SUBSTRING(@strInput, @COUNTER, 1)
    SET @COUNTER = @COUNTER + 1
    END
    RETURN @strOutput 
END
Chú ý để hàm chạy đúng bạn cần để
SET @TCVN = ',184, 181, 182,...'


SET @UNICODE = ',225, 224, 7843,...'

Mỗi biến trên cùng 1 dòng code. Ở đây mình không trình bày được như vậy vì nếu để trên cùng dòng sẽ quá độ rộng của trình duyệt

Để chạy thử hàm trên bạn mở notepad, chọn font (Unikey) là TCVN3 và gõ vào chuỗi bất kỳ.

Vì dụ:
SELECT [dbo].[fuConvertToUnicode] ('Céng hßa x· héi chñ nghÜa ViÖt Nam')
 --> Cộng hòa xã hội chủ nghĩa Việt Nam

Tính số ngày trong tháng

Khi lập trình với cơ sở dữ liệu, có thể bạn sẽ cần tính số ngày của tháng để thực hiện mục đích nào đó (Tính số liệu trung bình theo tháng chằng hạn). Tôi xin sẽ giới thiệu với bạn hàm được viết trong SQL

Bạn mở SQL Query viết hàm như sau:
Hàm trả về kiểu Int
Input: Tháng, Năm
Output: Số ngày của tháng

 

CREATE  FUNCTION dbo.funDaysInMonth (
@Thang  Int,
@Nam    Int
)  
RETURNS int
AS  
BEGIN   

DECLARE @mNgay  Int

IF @Thang = 2 
    BEGIN
        IF((@Nam % 4 = 0 AND @Nam %100<>0)OR(@Nam % 400 = 0))
            SET @mNgay = 29
        ELSE
            SET @mNgay = 28
    END
ELSE
    SELECT @mNgay =  
        CASE @Thang
            WHEN 1 THEN 31
            WHEN 3 THEN 31
            WHEN 5 THEN 31
            WHEN 7 THEN 31
            WHEN 8 THEN 31
            WHEN 10 THEN 31
            WHEN 12 THEN 31
            WHEN 4 THEN 30
            WHEN 6 THEN 30
            WHEN 9 THEN 30
            WHEN 11 THEN 30
        END

RETURN @mNgay
END

Bạn có thể kiểm tra bằng lệnh sau:

Select dbo.funDaysInMonth (2,2004) --29
Select dbo.funDaysInMonth (2,2005) --28



Chúc các bạn thành công!

 

Microsoft SQL Server 2008 R2 Enterprise Edition x86 and x64

Microsoft SQL Server 2008 R2 Enterprise Edition x86 and x64|Size 3.01 GB
SQL Server 2008 R2 delivers several breakthrough capabilities that will enable your organization to scale database operations with confidence, improve IT and developer efficiency, and enable highly scalable and well managed Business Intelligence on a self-service basis for your users.

RELEASE iNFORMATiON
CRACKER: TEAM Z.W.T
SUPPLiER: TEAM Z.W.T
PACKER: TEAM Z.W.T
RELEASE DATE: 04/29/2010
FORMAT: iSO
SiZE: 1 DVD
PLATFORM: WinALL
SOFTWARE TYPE: UTIL
LANGUAGE: ENGLiSH

 

http://hotfile.com/dl/41323733/0f01557/IMRCSOFO.TQS.LESVRRE2.00.82RE.TNRERPSI.EDETIOI.N8X.6NA.D6X-4WZITOS.part01.rar.html
http://hotfile.com/dl/41323890/bf112f0/IMRCSOFO.TQS.LESVRRE2.00.82RE.TNRERPSI.EDETIOI.N8X.6NA.D6X-4WZITOS.part02.rar.html
http://hotfile.com/dl/41324070/68a9f2e/IMRCSOFO.TQS.LESVRRE2.00.82RE.TNRERPSI.EDETIOI.N8X.6NA.D6X-4WZITOS.part03.rar.html
http://hotfile.com/dl/41324236/3958620/IMRCSOFO.TQS.LESVRRE2.00.82RE.TNRERPSI.EDETIOI.N8X.6NA.D6X-4WZITOS.part04.rar.html
http://hotfile.com/dl/41324777/52bdabc/IMRCSOFO.TQS.LESVRRE2.00.82RE.TNRERPSI.EDETIOI.N8X.6NA.D6X-4WZITOS.part05.rar.html
http://hotfile.com/dl/41330898/248b9ef/IMRCSOFO.TQS.LESVRRE2.00.82RE.TNRERPSI.EDETIOI.N8X.6NA.D6X-4WZITOS.part06.rar.html
http://hotfile.com/dl/41331228/a0e270f/IMRCSOFO.TQS.LESVRRE2.00.82RE.TNRERPSI.EDETIOI.N8X.6NA.D6X-4WZITOS.part07.rar.html
http://hotfile.com/dl/41331553/9d20e76/IMRCSOFO.TQS.LESVRRE2.00.82RE.TNRERPSI.EDETIOI.N8X.6NA.D6X-4WZITOS.part08.rar.html
http://hotfile.com/dl/41331866/e7fa364/IMRCSOFO.TQS.LESVRRE2.00.82RE.TNRERPSI.EDETIOI.N8X.6NA.D6X-4WZITOS.part09.rar.html
http://hotfile.com/dl/41332339/8045c6c/IMRCSOFO.TQS.LESVRRE2.00.82RE.TNRERPSI.EDETIOI.N8X.6NA.D6X-4WZITOS.part10.rar.html
http://hotfile.com/dl/41332712/b84506d/IMRCSOFO.TQS.LESVRRE2.00.82RE.TNRERPSI.EDETIOI.N8X.6NA.D6X-4WZITOS.part11.rar.html
http://hotfile.com/dl/41333036/ce026f6/IMRCSOFO.TQS.LESVRRE2.00.82RE.TNRERPSI.EDETIOI.N8X.6NA.D6X-4WZITOS.part12.rar.html
http://hotfile.com/dl/41333425/4e0e47b/IMRCSOFO.TQS.LESVRRE2.00.82RE.TNRERPSI.EDETIOI.N8X.6NA.D6X-4WZITOS.part13.rar.html
http://hotfile.com/dl/41333672/4c58c83/IMRCSOFO.TQS.LESVRRE2.00.82RE.TNRERPSI.EDETIOI.N8X.6NA.D6X-4WZITOS.part14.rar.html
http://hotfile.com/dl/41333976/be2da61/IMRCSOFO.TQS.LESVRRE2.00.82RE.TNRERPSI.EDETIOI.N8X.6NA.D6X-4WZITOS.part15.rar.html
http://hotfile.com/dl/41334076/4cac270/IMRCSOFO.TQS.LESVRRE2.00.82RE.TNRERPSI.EDETIOI.N8X.6NA.D6X-4WZITOS.part16.rar.html

Default Password: tactools.org