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!

 

Kiểm tra mật khẩu khi đăng ký thành viên hoặc tạo mới User

Trong khi xây dựng phần mềm hoặc website. Chắc chắn bạn sẽ phải viết phần quản trị User, Có khi bạn cần yêu cầu mật khẩu truy cập cần có độ dài nhất định(6) và mật khẩu yêu cầu cả ký tự và số? Có nhiều cách để thực hiện, mình xin giới thiệu 1 cách

Cách của mình chủ yếu dùng SQL để kiểm tra.

Trước hết bạn cần viết 1 hàm kiểm tra chuỗi ký tự có yêu cầu cả ký tự và chữ số, giá trị trả về là kiểu INT. Bạn viết hàm trong SQL như sau:

CREATE FUNCTION dbo.ufnKiemTraKyTuVaSo
( 
    @ChuoiKiemTra VARCHAR(1000) 
)
RETURNS INT

BEGIN
DECLARE @ketqua int
    IF PATINDEX('%[0-9]%',@ChuoiKiemTra ) > 0 
        AND PATINDEX ( '%[a-z]%',@ChuoiKiemTra )> 0  
        SET @ketqua = PATINDEX('%[0-9]%',@ChuoiKiemTra)
    ELSE SET @ketqua =0
RETURN @ketqua 
END

-- Trong hàm trên mình sẽ kiểm tra trong @ChuoiKiemTra 
-- nếu trong chuỗi này có cả chữ số và ký tự thì trả về 
-- vị trí đầu tiên của chữ số trong chuỗi

Sau khi bạn viết xong hàm này bạn kiểm tra bằng cách:

SELECT dbo.ufnKiemTraKyTuVaSo ('abczyx')   
-- Kết quả =0 vì không có chữ số
SELECT dbo.ufnKiemTraKyTuVaSo ('abc12zy3x') 
-- Kết quả =4 vị chí chữ số đầu tiên (1) trong chuỗi
SELECT dbo.ufnKiemTraKyTuVaSo ('0987654')   
-- Kết quả =0 vì không có ký tự

Tiếp theo bạn viết hàm kiểm tra mật khẩu , giá trị trả về là kiểu INT.
Bạn viết hàm trong SQL như sau như sau:

CREATE FUNCTION dbo.ufnKiemTraMatKhau
( 
    @MatKhau VARCHAR(1000) 
)
RETURNS INT

BEGIN
    DECLARE @result int
    -- Nếu mật khẩu ngắn hơn 6 thì kết quả =0
    IF len(@MatKhau )<6 
        SET @result=0
    ELSE
    -- Ngược lại Kết quả = dbo.ufnKiemTraKyTuVaSo(@MatKhau)
        SET @result = dbo.ufnKiemTraKyTuVaSo(@MatKhau)
RETURN @result
END

Bạn có thể kiểm tra bằng cách:

SELECT dbo.ufnKiemTraMatKhau ('abc34')  
-- Kết quả =0 chiều dài không đủ 6 
...

Để sử dụng hàm này trong code asp.net cũng đơn giản bằng cách gọi hàm trong SQL. Nếu giá trị lớn hơn 0 thì OK, Nếu bằng 0 thì đưa ra thông báo.
Có thời gian mình sẽ viết tiếp bằng asp.net và sẽ để trong mục Lập trình :: Asp.net

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

 

Ebooks MSSQL Sever tiếng việt

SQL là viết tắt của Structured Query Language Ngôn ngữ truy vấn có cấu trúc, là một chuẩn của ANSI (American National Standards Institute – Viện tiêu chuẩn quốc gia Hoa kỳ) về truy xuất các hệ thống CSDL. Các câu lệnh SQL được sử dụng để truy xuất và cập nhật dữ liệu trong một CSDL.
Các đặc tính của SQL sever:
* SQL cho phép bạn truy cập vào CSDL.
* SQL là một chuẩn ngôn ngữ của ANSI.
* SQL có thể thực thi các câu truy vấn trên CSDL.
* SQL có thể lấy dữ liệu từ CSDL.
* SQL có thể chèn dữ liệu mới vào CSDL.
* SQL có thể xoá dữ liệu trong CSDL.
* SQL có thể sửa đổi dữ liệu hiện có trong CSDL.
* SQL về cơ bản là dễ học. Nếu có ai có thời gian để nghiên cứu chuyên sâu về nó. Thì rất tốt và hữu dụng cho việc lập trình.

Các phiên bản SQL: Trải qua nhiều lần thử nghiệm thì SQL đã từng bước nâng cấp và cập nhật . Các tính năng ngày càng hoàn thiện hơn. Để đáp ứng cho nhu cầu lập trình cho Lập trình viên tốt hơn.
SQL 2000
SQL 2005
SQL 2008
SQL 2010 (là phiên bản chưa chính thức, tích hợp đi cùng bộ VS studio 2010 hiện đang có phiên bản beta).
Các tài liệu về SQL bằng tiếng anh thì có rất nhiều trên mạng, các bạn có thể vào trực tiếp trang web của nhà cung cấp MS để có những trợ giúp tốt hơn. Những ebook bằng tiếng việt thì chỉ có tài liệu về SQL sever 2000, là nhiều.
Sau đây là 1 Số tài liệu về SQL sever bằng tiếng Việt mà mình đã sưu tầm được:

1. Hệ Quản Trị Cơ Sở Dữ Liệu SQL Sever HP5_ĐHTN: Đây là CD giáo trình của trường đai học Tự Nhiên thành phố Hồ Chí Minh.

http://www.mediafire.com/?sharekey=188070a68f7b4d439bf8d6369220dcab294c419f4c98db0cc95965eaa7bc68bc

2. Hướng dẫn cơ bản để tạo 1 cơ sở dữ liệu với SQL sever

http://www.mediafire.com/?5mzinunommj

3. Giáo Trình SQL sever của trường Đại học Khoa học Huế

http://www.mediafire.com/?zwjkyootuh1

4. Giáo Trình SQL sever của trường Đại học Thủy Lợi

http://www.mediafire.com/?2jvfz4gtjtc

5. Quản trị và phát triển ứng dụng với MS SQL sever: Tài liệu của học viện kỹ thuật Quân sự.

http://www.mediafire.com/?keqndmumnny

6. Giáo trình thực hành SQL Của Thầy Trần Nguyên Phong.

http://www.mediafire.com/?nntzonz5ujz

7.Tự học SQL sever 2000

http://www.mediafire.com/?n4ma5midgcn

8.Huong dan su dung SQL Server

http://www.mediafire.com/download.php?2em2x5nmnhd

9.Giáo trình SQL sever 2005 Giáo trình của trường đại Học Huế.

http://www.mediafire.com/?mn2fylymzmn

Phần mềm:
Mình đang sử dụng version 2005.

http://www.4shared.com/file/76199302/6fe39f7d/SQLServer2005_SSMSEE.html

http://www.microsoft.com/downloadS/details.aspx?familyid=C243A5AE-4BD1-4E3D-94B8-5A0F62BF7796&displaylang=en