PDA

View Full Version : سوال: cast



ehsan_wwe
پنج شنبه 24 دی 1388, 08:25 صبح
با سلام
من میخوام 1 متغییر varchar به datetime تبدیل کنم


CAST(@InTarikheSodor AS DateTime)

مینویسم ولی بهم میگه
syntax
اشتباه
میشه لطفا راهنماییم کنید
و 1 سوال دیگه هم داشتم
وقتی تابعcast اونو تبدیل کرد دوباره تو خود متغییر اونو میریزه؟

AminSobati
پنج شنبه 24 دی 1388, 09:17 صبح
سلام،
این یک مثال:



declare @x nvarchar(20)
set @x='1999-1-1'
select CAST(@x as datetime)


شاید تاریخ شما شمسی هست؟ تاریخ شمسی در محدوده datetime نمیگنجه.
تابع Cast مجددا به شما خروجی میده یعنی در همون متغیر نمیریزه

bad_boy_2007
جمعه 25 دی 1388, 21:31 عصر
declare @x nvarchar(20)
set @x='1999-1-1'
select CAST(@x as datetime)




یک سوال ، تفاوت کد فوق با کد زیر چیست و کدامیک سریعتر اجرا میگردد ؟




declare @x nvarchar(20)
set @x='1999-1-1'
select Convert(Datetime,@x) as datetime

AminSobati
شنبه 26 دی 1388, 19:35 عصر
به نظر میرسه دو بار دارین به datetime تبدیل میکنین

bad_boy_2007
شنبه 26 دی 1388, 21:04 عصر
سلام مجدد
نه اینطور نیست ، فکر میکنم نام مستعار بدی انتخاب کده ام . کوئری دوم که من در تمام موارد از این روش استفاده میکنم این است :



declare @x nvarchar(20)
set @x='1999-1-1'
select Convert(Datetime,@x) as dt


و حال سوال من اینست که کدام روش بهتر است و چرا ؟
با تشکر

bad_boy_2007
دوشنبه 28 دی 1388, 18:16 عصر
من از آخر نفهمیدم کدوم روش تبدیل نوع بهتره ؟ Cast یا Convert
اونطوری که تو سایت مایکروسافت نوشته هر دو یک عمل رو انجام میدن


CAST and CONVERT provide similar functionality

ولی آخه فرقشون چیه ؟


http://msdn.microsoft.com/en-us/library/ms187928(SQL.90).aspx

bad_boy_2007
دوشنبه 28 دی 1388, 18:28 عصر
CONVERT is SQL Server specific, CAST is ANSI.
CONVERT is more flexible in that you can format dates etc. Other than that, they are pretty much the same. If you don't care about the extended features, use CAST



ANSI-SQL is more portable across database platforms. So if you ever wanted to use the query on Orcale, DB2, etc. The ANSI version is more likely to work without changes




Convert has a style parameter for date to string conversions.



http://stackoverflow.com/questions/707335/t-sql-cast-versus-convert


یه چیزایی فهمیدم ولی این مورد آخری رو درست و حسابی نفهمیدم ، ظاهرا برتری Convert نسبت به Cast قابلیت انعطافش در کار با تاریخ است ، حالا این انعطاف پذیری دقیقا چیه ؟ چه جور تبدیلاتی با Convert انجام میشه که با Cast نمیشه ؟

AminSobati
دوشنبه 28 دی 1388, 18:37 عصر
سلام دوست عزیزم،
حق با شماست، خطای دید باعث شد تصور کنم دو بار تبدیل انجام میدین!
و اما در مورد سوال اصلی، باید عرض کنم تفاوتی نداره از لحاظ سرعت، CAST یا CONVERT در این مورد یکسان هستند

محمد سلیم آبادی
چهارشنبه 30 دی 1388, 00:55 صبح
چه جور تبدیلاتی با Convert انجام میشه که با Cast نمیشه ؟
تابع Convert دارای یک امکانی به نام style است که انعطاف پذیری تبدیل را افزایش می دهد. مثلا style های مربوط به تاریخ زمان در نمایش تاریخ در انواع فرمت های مورد استفاده قرار می گیرد. و در مورد نوع money مثلا شما می توانین مقادیر را سه رقم سه رقم با کاما از هم تفکیک کنین.

bad_boy_2007
چهارشنبه 30 دی 1388, 21:58 عصر
ممنون جالب بود فکر میکنم واسه بعضی جا ها به دردم بخوره بخصوص فرمت کارنسی با کاما .
میشه یک نمونه مثال بزارید ؟

محمد سلیم آبادی
پنج شنبه 01 بهمن 1388, 04:53 صبح
money:
http://www.barnamenevis.org/forum/showpost.php?p=863078&postcount=6

date time:
--U.S.
select CONVERT(varchar, getdate(), 101) --01/23/2010
--ANSI
select CONVERT(varchar, getdate(), 102) --2010.01.23