Được gửi bởi
Mr_Bac
Cám ơn mọi người nhiều.
Mình hiểu rồi.
Ngày tháng mình lưu theo kiểu dữ liệu là Datetime. Vì bị vướng phần giờ + phút nên không biết Insert và Update như nào, vì mình vẫn tưởng là SQL2005có một hàm nào đó về giờ và phút, giống như hàm day, month, year cho ngày tháng vậy.
Giờ mới biết mình lầm. Hì.
Cứ Insert và Update như bình thường theo format của mình. Còn SQL lưu trữ thế nào thì kệ nó.
Cám ơn mọi người nhiều ha.
Chúc 1 ngày tốt lành.
Thật ra bạn nói như vậy không chính xác, vì:
1. Chính xác là T-SQL có các hàm xử lý với kiểu DATETIME khá mạnh, bạn có thể GOOGLE SEARCH về một số hàm như: DATEPART,DATEADD,DATEDIFF,... những hàm này thì sau khi serach nó sẽ chỉ thẳng tới trang MSDN của MS ngay nên không khó khăn gì.
2. Không phải là mình cứ INSERT, UPDATE kiểu DATETIME theo FORMAT của mình, còn SQL lưu trữ thế nào thì kệ nó. Điều này là hoàn toàn sai, nếu ko muốn nói nhiều lúc dở khóc dở cười vì nhầm lẫn giữa Ngày với Tháng. Để lưu trữ chính xác bạn cần phải xác định:
2.a. Nếu bạn truyền vào bằng kiểu DATETIME từ .NET hoặc từ T-SQL thì không cần lo lắng vì nó tự hiều các thành phần trong kiểu DATETIME.
2.b. Nếu bạn truyền bằng kiểu Text (CHAR,NVARCHAR,..) thì khi thực hiện SET giá trị cho một biến kiểu DATETIME trong SQL cần chắc chắn về định dạng của chuỗi ngày tháng truyền vào. Mặc định SQL sử dụng định dạng mm/dd/yyyy trong khi người Việt chúng ta quen nhập vào với định dạng dd/mm/yyyy điều này sẽ dẫn đến sai lệch trong lưu trữ. Để khắc phục điều này bạn cần thực hiện qua một hàm CONVERT với một tham số xác đinh kiểu định dạng. Các bạn có thể hiểu qua ví dụ dưới đây:
Code:
--Khai báo một biến DATETIME và 1 biến kiểu VARCHAR(10)
DECLARE @date DATETIME,
@value VARCHAR(10)
--Giả sử giá trị truyền vào cho biến CHAR theo kiểu người Việt quen dùng
SET @value = '12/05/2010'
--Thực hiện gán giá trị cho biến kiểu DATETIME theo cách mặc định, hàm convert sẽ ngầm hiều ngày tháng định dạng kiều Mỹ (mm/dd/yyyy)
SET @date = CONVERT(DATETIME,@value)
SELECT @date
--Khi thực hiện CONVERT ko có tham số sau khi SELECT giá trị của biến @date sẽ là
-- 2010-12-05 00:00:00.000 => giữa tháng và ngày sẽ bị đảo lộn
--Để khắc phục ta thêm tham số 103 cho hàm CONVERT, 103 là tham số dùng cho kiểu lưu trữ ngày tháng VN và một số nước Châu âu như Pháp, Anh
SET @date = CONVERT(DATETIME,@value,103)
SELECT @date
-- Giá trị biến @date lúc này là: 2010-05-12 00:00:00.000
-- ==> đúng giá trị mà chúng ta muốn lưu trữ.
Hy vọng với chú ý trên sẽ giúp bạn trong công việc của mình.
Chúc thành công!
Bookmarks