Thủ Thuật Access
[Hỏi] Between fied đã convert bằng hàm datevalue - Phiên bản có thể in

+- Thủ Thuật Access (http://thuthuataccess.com/forum)
+-- Diễn đàn: Access Cơ Bản (http://thuthuataccess.com/forum/forum-5.html)
+--- Diễn đàn: Query (http://thuthuataccess.com/forum/forum-7.html)
+--- Chủ đề: [Hỏi] Between fied đã convert bằng hàm datevalue (/thread-10379.html)

Pages: 1 2


Between fied đã convert bằng hàm datevalue - mrsiro - 08-02-18

[Hình: 201892b185fa-1724-4efd-b37b-504655e887e6.png]
Cột a1 muốn between từ b1 và c1 thì khai báo câu lệnh thế nào , ai biết có thể giúp mình với.


RE: Between fied đã convert bằng hàm datevalue - ongke0711 - 08-02-18

BETWEEN #DateValue([b])# AND #DateValue([c])#


RE: Between fied đã convert bằng hàm datevalue - mrsiro - 08-02-18

[Hình: 2018dc1d2eb9-58bd-4154-8be8-c30b4f326a28.png]
lỗi bạn ơi


RE: Between fied đã convert bằng hàm datevalue - ongke0711 - 08-02-18

cột b, c của bạn là dữ liệu lấy từ SQL Server? dạng Text? Giá trị nó hiển thị như thế nào?


RE: Between fied đã convert bằng hàm datevalue - mrsiro - 08-02-18

(08-02-18, 10:34 PM)ongke0711 Đã viết: cột b, c của bạn là dữ liệu lấy từ SQL Server? dạng Text? Giá trị nó hiển thị như thế nào?

a,b,c đều là dạng text table access, chứa giá trị dd/mm/yyyy, giờ muốn convert sang date để tìm ra giá trị cột a between b và c. Vì đang là text nên nếu không convert datevalue thì lấy giá trị between không chính xác.


RE: Between fied đã convert bằng hàm datevalue - ongke0711 - 08-02-18

bạn bỏ mấy dấu # đi.


RE: Between fied đã convert bằng hàm datevalue - tranthanhan1962 - 08-02-18

Vì a, b,c đều có kiểu dữ liệu là text nên bạn phải đổi kiểu:
Field a1: CDate(DateValue([a])
Criteria Between CDate(DateValue([b]) And CDate(DateValue([c])
* Vì đã sử dụng hàm đổi kiểu nên không cần phài có cặp # để khóa giá trị ngày, Các field b1, c1 bạn muốn sử dụng kiểu dữ liệu nào không quan trọng xóa nó đi cũng được vì đã xử lý đổi kiểu ở Criteria. Nếu muốn hiển thị theo kiểu date thì dùng hàm CDate, Nhớ là dù a, b,c là dạng text nhưng cũng phải tuân thủ theo date format của additional setting của windows
Ví dụ giá trị text là "2/8/2018" nếu date format của additional setting của windows là dd/mm/yyyy  thì CDate = 02/08/2018 (ngày 2 tháng 8 năm 2018), nếu là M/d/yyyy thì CDate = 2/8/2018 (Tháng 2  ngày 8 năm 2018)


RE: Between fied đã convert bằng hàm datevalue - mrsiro - 09-02-18

khi lưu dữ liệu dạng date thì access phụ thuộc vào kiểu của window, ví dụ: 13/05/2017 khi lưu thì y nguyên, nhưng khi lưu 12/05/2017 thì có thể bị chuyển thành 05/12/2017. Vậy khi lưu giá trị mình lưu theo kiểu định danh 01-jan-17, như vậy có ok không các bạn.


RE: Between fied đã convert bằng hàm datevalue - tranthanhan1962 - 09-02-18

Nếu xử dụng kiểu dd-mmm-yyy thì máy sẽ luôn dịch OK đúng theo date format của additional setting của windows với đều kiện phải đúng Ví dụ 01-jam-17 máy sẽ báo lỗi ngay. Thực ra máy cũng tự xử lý một số trường hợp không hợp lệ.
Ví dụ:
       text                        kiểu setting là dd/mm/yyyy                                                              kiểu setting là mm/dd/yyyy
11/12/2018                             11/12/2018                                                                                12/11/2018
25/12/2008                             25/12/2008                                                                                12/25/2008 (tự sửa vì không có tháng 25 ngày 12 năm 2018)
12/25/2008                             25/12/2008 (tự sửa vì không có ngày 12 tháng 25 năm 2018)         12/25/2008
33/13/2008                             #Error                                                     #Error
Tốt nhất là không nên để xảy ra những trường hợp lỗi cho dù bạn xử lý theo cách nào.


RE: Between fied đã convert bằng hàm datevalue - mrsiro - 09-02-18

Bạn có thể cho mình xin vài kinh nghiệm xử lí kiểu date mà không phụ thuộc window không. Hiện tại mình chỉ có thể cho field theo dạng text, rồi tách chuỗi khi nhập rồi lưu vào, nhưng vẫn bị phụ thuộc window và điều thứ 2 là mỗi lần truy vấn lại cần phải convert sang date, rất là bất tiện.