ورود

View Full Version : دستورSELECT برای تاریخ



shima2006
جمعه 30 مرداد 1388, 08:41 صبح
سلام دوستان
من یک دستور SELECT می خوام بنویسم که رکوردهایی رو که بین دو تاریخ مشخص هستند رو برای من برگردونه ، نوع تاریخ در دیتابیس TEXT هست و تاریخ به صورت شمسی ذخیره میشود.
میشه لطف کنید به من بگیید چطور می تونم این سلکت رو بنویسم؟

meysam_pro
جمعه 30 مرداد 1388, 11:05 صبح
نوع تاریخ در دیتابیس TEXT هست
نوع داده ای Text قابلیت شرکت در کوئری ها رو به صورت صریح نداره(این نوع داده ای صرفا برای سازگاری با نسخه های قبلی تو ورژن های جدید هست وگرنه هیچ مزیت خاصی نداره، برعکس عیب هم محسوب میشه).

1.نوع داده رو Date در نظر بگیرین و به صورت میلادی ذخیره کنید و وقتی که میخاین نشون بدین تبدیل کنید.
2.نوع داده رو intبگیرین و قالب YYYYMMDD در نظر بگیرین
.....
در ضمن نمونه مقدار ذخیره شده رو هم مثال بزنید تا کوئری بنویسیم

shima2006
جمعه 30 مرداد 1388, 20:46 عصر
متشکرم دوست عزیز ، دو تا خواهش :

.نوع داده رو intبگیرین و قالب YYYYMMDD در نظر بگیرین
1- راجع به این راه حل بیشتر توضیح بدید
2- میشه یک مثال برام بزنید که چطور می تونم این SELECT رو بنویسم:خجالت:
راستی اگر نوع داده رو varchar بگیرم چی؟؟؟

حمیدرضاصادقیان
شنبه 31 مرداد 1388, 07:36 صبح
سلام.شما اگر نوع داده رو varchar بگیرید(همین کاری که من کردم و با همون فرمت شمسی ذخیره میکنم) میتونید از فرمت زیر استفاده کنید.


select * from table1 where date1>='87/01/01' and date1<='88/12/30'

موفق باشید

happy65_sh
شنبه 31 مرداد 1388, 08:51 صبح
select * from table1 where date between date1 and date2

shima2006
سه شنبه 03 شهریور 1388, 08:17 صبح
متشکرم دوستان:لبخندساده:

mahboob_comp
چهارشنبه 04 شهریور 1388, 09:54 صبح
سلام خدمت دوستان
من تو SQL یه جدول دارم که یکی از فیلدهاش از نوع Datetime است، ولی در قسمت سی شارپ نمیتونم اطلاعاتی که کاربر در تکست باکس می نویسه رو در جدول وارد کنم، به فیلد تاریخ ارور میگیره.
لطفاٌ راهنماییم کنید باید چطوری دستور Insert رو بنویسم، یا تنظیم خاصی باید در SQL انجام بدم؟:ناراحت:

بهنام بهمنی
چهارشنبه 04 شهریور 1388, 10:39 صبح
البته شما بايد خطا را اينجا ذکر مي کرديد و لي فکر مي کنم مشکل شما ذخيره تاريخ شمسي است, قبل از ذخيره بايد تاريخ را به ميلادي تبديل و در هنگام بازيابي عمليات معکوس را انجام دهيد

mahboob_comp
پنج شنبه 12 شهریور 1388, 09:18 صبح
سلامببخشید دیر اومدم.ممنون دوست عزیز، مشکلم همین بود.فقط میشه راهنماییم کنید چطوری هنگام بازیابی اطلاعات در دیتا گرید ویو ،تاریخ میلادی رو به شمسی تبدیل کنم.با تشکر

mahboob_comp
پنج شنبه 12 شهریور 1388, 09:32 صبح
دوستان یه خواهش دارم:
من میخوام وقتی شروع میکنم نامی رو توی تکست باکس می نویسم ،ردیف مربوط به آن نام در دیتا گرید ویو انتخاب شود و با تغییر نام ردیف قبلی از حالت انتخاب خارج شده و ردیف مربوط به نام جدید انتخاب شود.
میشه لطفاٌ راهنماییم کنید؟

mahboob_comp
شنبه 14 شهریور 1388, 08:29 صبح
سلام
چرا جوابمو نمیدین؟؟؟؟؟؟؟:ناراحت:

بهنام بهمنی
شنبه 14 شهریور 1388, 11:28 صبح
در مورد تايپ کردن وفيلتر شدن همزمان با تايپ و يا انتخاب رديف تايپ شده راجع به AJAX و مباحثي مانند AutoComplete در تالارهاي مرتبط جستجو کنيد

http://barnamenevis.org/forum/showthread.php?t=50594

در باره نمايش فارسي تاريخ دوباره مي توانيد در تالار برنامه نويسي asp‎.Net جستجو کنيد و يا تابع زير را در پايگاه داده تان تعريف کرده و در هنگام select ستون تاريخ را به آن پاس دهيد
مثلا



Select dbo.GregorianToShamsi("2009/12/12")





set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


-- =============================================
-- Author: Behnam Bahmani
-- Create date: 2005/02/27
-- Description: <Description, ,>
-- =============================================
ALTER FUNCTION [dbo].[GregorianToShamsi] (@MDate DateTime)
RETURNS Varchar(10)
AS
BEGIN
DECLARE @SYear as Integer
DECLARE @SMonth as Integer
DECLARE @SDay as Integer
DECLARE @AllDays as float
DECLARE @ShiftDays as float
DECLARE @OneYear as float
DECLARE @LeftDays as float
DECLARE @YearDay as Integer
DECLARE @Farsi_Date as Varchar(100)
SET @MDate=@MDate-CONVERT(char,@MDate,114)
SET @ShiftDays=466699 +2
SET @OneYear= 365.24199

SET @SYear = 0
SET @SMonth = 0
SET @SDay = 0
SET @AllDays = CAst(@Mdate as Real)
SET @AllDays = @AllDays + @ShiftDays
SET @SYear = (@AllDays / @OneYear) --trunc
SET @LeftDays = @AllDays - @SYear * @OneYear
if (@LeftDays < 0.5)
begin
SET @SYear=@SYear+1
SET @LeftDays = @AllDays - @SYear * @OneYear
end;
SET @YearDay = @LeftDays --trunc
if (@LeftDays - @YearDay) >= 0.5
SET @YearDay=@YearDay+1
if ((@YearDay / 31) > 6 )
begin
SET @SMonth = 6
SET @YearDay=@YearDay-(6 * 31)
SET @SMonth= @SMonth+( @YearDay / 30)
if (@YearDay % 30) <> 0
SET @SMonth=@SMonth+1
SET @YearDay=@YearDay-((@SMonth - 7) * 30)
end
else
begin
SET @SMonth = @YearDay / 31
if (@YearDay % 31) <> 0
SET @SMonth=@SMonth+1
SET @YearDay=@YearDay-((@SMonth - 1) * 31)
end
SET @SDay = @YearDay
SET @SYear=@SYear+1
declare @mymonth as Nvarchar(5)
if (@SMonth<10)
begin
SET @mymonth='0'+CAST (@SMonth as VarChar(10))
end
else
SET @mymonth=CAST (@SMonth as VarChar(10))
declare @myday as Nvarchar(5)
if (@SDay<10)
begin
SET @myday='0'+CAST (@SDay as VarChar(10))
end
else
SET @myday=CAST (@SDay as VarChar(10))

SET @Farsi_Date = CAST (@SYear as VarChar(10)) + '/' + @mymonth + '/' + @myday
Return @Farsi_Date


END

mahboob_comp
شنبه 14 شهریور 1388, 14:55 عصر
دوست عزیز ،ممنون از کمکتون، مشکلم حل شد.