PDA

View Full Version : تبدیل داده در کوئری



rk1983xx
چهارشنبه 17 خرداد 1391, 13:21 عصر
سلام
من توی جدول یه فیلد دارم از نوع متنی حاوی تاریخ شمسی شبیه به "1391/01/01"
میخوام وقتی کوئری میگیرم تبدیل به نوع تاریخی بشه تا بتونم روش شرط محدوده پیاده سازی کنم
آیا این امکان پذیر هست یا نه ؟

Abbas Amiri
چهارشنبه 17 خرداد 1391, 19:14 عصر
برای شرط گذاشتن الزامی به تبدیل نوع نیست . فرض کنیم نام فیلدشما sDate است و میخواهید با متغیر ویا کنترلهایی بنامهای d1 , d2 محدوده تعیین کنید


strFilter = "sDate >= '" & d1 & "' AND sDate <= '" & d2 & "'"

rk1983xx
پنج شنبه 18 خرداد 1391, 13:47 عصر
برای شرط گذاشتن الزامی به تبدیل نوع نیست . فرض کنیم نام فیلدشما sDate است و میخواهید با متغیر ویا کنترلهایی بنامهای d1 , d2 محدوده تعیین کنید


strFilter = "sDate >= '" & d1 & "' AND sDate <= '" & d2 & "'"


آیا با همان دقت عددی انجام می شود ؟
من خودم از این روش استفاده کردم و مشکلم حل شد

Select * from Mytable Where ((CDate([sdate]))>=#1391/01/01#) And ((CDate([sdate]))<=#1391/12/29#)
آیا روش شما یا روش من هر کدوم باگ خاصی دارند ؟
مثلا خوب در روش شما محدوده تاریخ برای 1391/01/01 با محدوده 1391/1/1 دارای مغایرت در خروجی خواهد شد ولی اگر به تاریخ تبدیل شود این مشکل رفع می شود

Abbas Amiri
پنج شنبه 18 خرداد 1391, 20:49 عصر
درروش شماخطاهای جدی تری خواهیم داشت : در بعضی تاریخها خطا خواهد گرفت مثلا 31- 1391/02/29
ضمنا مورد ی که شما ذکر کردید با چندخط برنامه نویسی حل میشود

rk1983xx
جمعه 19 خرداد 1391, 13:31 عصر
درروش شماخطاهای جدی تری خواهیم داشت : در بعضی تاریخها خطا خواهد گرفت مثلا 31- 1391/02/29
ضمنا مورد ی که شما ذکر کردید با چندخط برنامه نویسی حل میشود

یعنی استاندارد کردن تاریخ پیش از ذخیره سازی در جداول و در زمان ساخت کوئری هست ؟
مثل تابعی که تاریخ رو به فرم ##/##/#### در بیاره ؟
بجز این کار دیگه ای هم لازمه ؟

Abbas Amiri
جمعه 19 خرداد 1391, 13:40 عصر
بله و با استفاده از تابع زیر میتوانید مشکل قالب بندی تاریخ شمسی درحالت فوق را حل کنید . عدد سال میتواند 2 رقمی یا چهار رقمی باشد


Function FixShamsiDate(ShamsiDate As String) As String
Dim k As Integer, j As Integer, d As String, m As String
k = InStr(1, ShamsiDate, "/")
j = InStr(k + 1, ShamsiDate, "/")
m = Mid(ShamsiDate, k + 1, j - k - 1)
d = Right(ShamsiDate, Len(ShamsiDate) - j)
FixShamsiDate = Left(ShamsiDate, k) & Format(m, "00") & "/" & Format(d, "00")
End Function