• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Vấn tin giữa 2 ngày với between ?

Chuyên mục thảo luận các vấn đề liên quan đến ứng dụng quản lý và cơ sở dữ liệu

Moderator: Điều hành

dong
Thành viên ưu tú
Thành viên ưu tú
Posts: 697
Joined: Thu 03/04/2008 7:46 am
Has thanked: 13 times
Been thanked: 2 times

Vấn tin giữa 2 ngày với between ?

Postby dong » Sun 22/05/2016 6:09 pm

giả sử mình có các mẫu tin ngày như sau:
02/05/2016
07/05/2016
14/05/2016
22/05/2016

Code: Select all

SELECT NGAY, IDPHIEUKHO, MACHUNGTU
FROM TABPHIEUKHO
WHERE (NGAY BETWEEN '05/01/2016' AND '05/22/2016') AND (MACHUNGTU = 1)

hoặc
SELECT     NGAY, IDPHIEUKHO, MACHUNGTU
FROM        TABPHIEUKHO
WHERE     (MACHUNGTU = 1) AND (NGAY >= '05/01/2016') AND (NGAY <= '05/22/2016')

nếu vấn tin từ ngày 01/05/2016 đến ngày 22/05/2016 nó bị mất đi 1 mẫu tin của ngày 22/05/2016, nếu mình vấn tin từ ngày 01/05/2016 đến 23/05/2016 mới lấy hết các mẫu tin. không lẽ mình vấn tin phải cộng thêm 1 ngày, các bạn có cách gì khác khi vấn tin giữa 2 ngày ?



mr_chuon
Thành viên chính thức
Thành viên chính thức
Posts: 27
Joined: Sun 05/02/2012 6:41 pm
Has thanked: 2 times

Re: Vấn tin giữa 2 ngày với between ?

Postby mr_chuon » Wed 01/06/2016 9:44 am

cột 'ngay' bạn không định dạng date đúng không. theo như mình hay làm thì mình buộc phải để date nếu muốn dùng nó để filter. mình dùng 2k8 nhá, hình như 2k5 vẫn query bình thường, còn 2k8 thì phải format là date

User avatar
vietteiv
Quản trị
Quản trị
Posts: 1325
Joined: Sat 10/02/2007 12:17 am
Location: Cung cấp giải pháp quản lý doanh nghiệp, dự án, tư vấn xây dựng
Has thanked: 6 times
Been thanked: 71 times
Contact:

Re: Vấn tin giữa 2 ngày với between ?

Postby vietteiv » Wed 01/06/2016 5:03 pm

mình hay sử dụng hàm convert này khi đụng đến ngày tháng

Code: Select all

Shared Function zConvertDateSQL(ByVal StrDateVN As Object) As String
        Dim sResult As String = "1900-01-01"
        Try
            If StrDateVN.ToString.Contains("CONVERT(DATETIME,") Then Return StrDateVN

            Dim dd As Date = CDate(StrDateVN)
            sResult = String.Format("{0}-{1}-{2}", Format(dd.Year, "0###"), Format(dd.Month, "0#"), Format(dd.Day, "0#"))
        Catch ex As Exception
            sResult = "1900-01-01"
        End Try
        Return String.Format("CONVERT(DATETIME,'{0}')", sResult)
    End Function

cách sử dụng:

Code: Select all

SELECT * FROM TABLE1
WHERE NGAYCHUNGTU BETWEEN zConvertDateSQL("05/01/2016") AND zConvertDateSQL("05/22/2016")

dong
Thành viên ưu tú
Thành viên ưu tú
Posts: 697
Joined: Thu 03/04/2008 7:46 am
Has thanked: 13 times
Been thanked: 2 times

Re: Vấn tin giữa 2 ngày với between ?

Postby dong » Sat 04/06/2016 9:51 am

mình đang dùng bô SQL 2005 có kiểu ngày là Datatime, SQL 2005 không có hổ trợ kiểu ngày Date, từ phiên bản SQL 2008 trở về sau mới có kiểu Date, các ơn các bạn đã quan tâm bài viết mình đã vọc ra rồi.

User avatar
vietteiv
Quản trị
Quản trị
Posts: 1325
Joined: Sat 10/02/2007 12:17 am
Location: Cung cấp giải pháp quản lý doanh nghiệp, dự án, tư vấn xây dựng
Has thanked: 6 times
Been thanked: 71 times
Contact:

Re: Vấn tin giữa 2 ngày với between ?

Postby vietteiv » Sat 04/06/2016 10:47 am

SQL2005 với SQL2008 đều có kiểu dữ liệu DATETIME mà.
SQL lưu dữ liệu ngày tháng theo kiểu yyyy-mm-dd nên hàm zConvertDateSQL mục đích cũng chỉ là đổi kiểu định dạng giống SQL rồi mới so sánh thôi.

bạn thử chạy câu select này trong SQL2005 xem được không

Code: Select all

SELECT CONVERT(DATETIME,'04/06/2016')


Return to “Ứng dụng Quản lý và Cơ sở dữ liệu”

Who is online

Users browsing this forum: No registered users and 2 guests