• 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

Điều hành viên: Điều hành

dong
Thành viên ưu tú
Thành viên ưu tú
Bài viết: 609
Ngày tham gia: T.Năm 03/04/2008 7:46 am
Has thanked: 12 time
Been thanked: 1 time

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

Gửi bàigửi bởi dong » CN 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

Mã: Chọn hết

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
Bài viết: 27
Ngày tham gia: CN 05/02/2012 6:41 pm
Has thanked: 2 time

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

Gửi bàigửi bởi mr_chuon » T.Tư 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

Hình đại diện của người dùng
vietteiv
Quản trị
Quản trị
Bài viết: 1318
Ngày tham gia: T.Bảy 10/02/2007 12:17 am
Đến từ: 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 time
Been thanked: 69 time
Liên hệ:

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

Gửi bàigửi bởi vietteiv » T.Tư 01/06/2016 5:03 pm

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

Mã: Chọn hết

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:

Mã: Chọn hết

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ú
Bài viết: 609
Ngày tham gia: T.Năm 03/04/2008 7:46 am
Has thanked: 12 time
Been thanked: 1 time

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

Gửi bàigửi bởi dong » T.Bảy 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.

Hình đại diện của người dùng
vietteiv
Quản trị
Quản trị
Bài viết: 1318
Ngày tham gia: T.Bảy 10/02/2007 12:17 am
Đến từ: 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 time
Been thanked: 69 time
Liên hệ:

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

Gửi bàigửi bởi vietteiv » T.Bảy 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

Mã: Chọn hết

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


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

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách