نمایش نتایج 1 تا 14 از 14

نام تاپیک: تبدیل تاریخ میلادی به شمسی با دستور Format

  1. #1
    کاربر دائمی آواتار mohammad diba
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    تهران
    سن
    42
    پست
    364

    Question تبدیل تاریخ میلادی به شمسی با دستور Format

    سلام بر دوستان عزیز و خوبم
    ظاهرا برای تبدیل تاریخ میلادی به شمسی می توان از دستور Format استفاده کرد مطابق زیز

    <code>
    DECLARE @today DATE = GETDATE();
    SELECT FORMAT( @today, 'yyyy-MM-dd', 'fa-IR' ) -- ۱۴۰۰-۰۱-۰۵
    SELECT FORMAT( @today, 'yyyy-MMM', 'fa-IR' ) --۱۴۰۰-فروردین
    SELECT FORMAT( @today, 'yyyy-MM-dd-dddd', 'fa-IR' ) --۱۴۰۰-۰۱-۰۵-پنجشنبه

    <code/>
    ولی برای من عمل نکرد و همون تاریخ میلادی رو داد مشکل کجاست؟

  2. #2
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,057

    نقل قول: تبدیل تاریخ میلادی به شمسی با دستور Format

    سلام و روز خوش

    تاریخ رو تبدیل نمیکنه، فقط در نمایش کاربرد داره.
    DECLARE @today DATE = GETDATE();
    SELECT FORMAT( @today, 'yyyy-MM-dd', 'fa-IR' )
    SELECT FORMAT( @today, 'yyyy-MMM', 'fa-IR' )
    SELECT FORMAT( @today, 'yyyy-MM-dd-dddd', 'fa-IR' )


    ولی میتونین در یک فیلد دیگه به صورت varchar یا int ذخیره کنین.

  3. #3
    کاربر دائمی آواتار mohammad diba
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    تهران
    سن
    42
    پست
    364

    نقل قول: تبدیل تاریخ میلادی به شمسی با دستور Format

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    سلام و روز خوش

    تاریخ رو تبدیل نمیکنه، فقط در نمایش کاربرد داره.
    DECLARE @today DATE = GETDATE();
    SELECT FORMAT( @today, 'yyyy-MM-dd', 'fa-IR' )
    SELECT FORMAT( @today, 'yyyy-MMM', 'fa-IR' )
    SELECT FORMAT( @today, 'yyyy-MM-dd-dddd', 'fa-IR' )


    ولی میتونین در یک فیلد دیگه به صورت varchar یا int ذخیره کنین.
    ممنون از پاسخ شما
    یعنی این پست غلطه؟
    https://dba.stackexchange.com/questi...-in-sql-server

  4. #4
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,057

    نقل قول: تبدیل تاریخ میلادی به شمسی با دستور Format

    100% اشتباه هست،
    خروجی تابع FORMAT از نوع متن هست (nvarchar) و نه تاریخ (date).

    این تابع صرفا تاریخ رو بر اساس culture که بهش میدین به شکل متن برمیگردونه.

    برای اطمینان میتونین کدهای زیر رو اجرا و نتیجه رو ببینین:
    SELECT    GETDATE() AS [Data Value], 
    SQL_VARIANT_PROPERTY(GETDATE() , 'BaseType') AS [Data Type]


    SELECT    FORMAT(GETDATE() , 'yyyy-MM-dd' , 'fa-IR') AS [Data Value],
    SQL_VARIANT_PROPERTY(FORMAT(GETDATE() , 'yyyy-MM-dd', 'fa-IR') , 'BaseType') AS [Data Type]


    Screenshot 2023-12-06 190858.png

    Screenshot 2023-12-06 191014.png

  5. #5
    کاربر دائمی آواتار mohammad diba
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    تهران
    سن
    42
    پست
    364

    نقل قول: تبدیل تاریخ میلادی به شمسی با دستور Format

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    100% اشتباه هست،
    خروجی تابع FORMAT از نوع متن هست (nvarchar) و نه تاریخ (date).

    این تابع صرفا تاریخ رو بر اساس culture که بهش میدین به شکل متن برمیگردونه.

    برای اطمینان میتونین کدهای زیر رو اجرا و نتیجه رو ببینین:
    SELECT    GETDATE() AS [Data Value], 
    SQL_VARIANT_PROPERTY(GETDATE() , 'BaseType') AS [Data Type]


    SELECT    FORMAT(GETDATE() , 'yyyy-MM-dd' , 'fa-IR') AS [Data Value],
    SQL_VARIANT_PROPERTY(FORMAT(GETDATE() , 'yyyy-MM-dd', 'fa-IR') , 'BaseType') AS [Data Type]


    Screenshot 2023-12-06 190858.png

    Screenshot 2023-12-06 191014.png
    خیلی ممنون از شما و تشکر ویژه که خالصانه آموزش میدید
    ولی مشکل من اینه که همون شمسی هم نشون نمیده مشکل کجاست؟
    Untitled.png

  6. #6
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,057

    نقل قول: تبدیل تاریخ میلادی به شمسی با دستور Format

    چون تابع FORMAT از امکانات dot net استفاده میکنه و برای فرمت لازم نیست که اون زبان روی سیستم نصب باشه؛
    پس این که ریشه مشکل در نصب زبان فارسی باشه منتفی هست:
    DECLARE @Date date=GETDATE();

    SELECT N'ایران' AS Culture, FORMAT(@Date , 'D' , 'fa') AS [Date] UNION
    SELECT N'عربستان' AS Culture, FORMAT(@Date , 'D' , 'ar-sa') AS [Date] UNION
    SELECT N'انگلیس' AS Culture, FORMAT(@Date , 'D' , 'en-gb') AS [Date] UNION
    SELECT N'آمریکا' AS Culture, FORMAT(@Date , 'D' , 'en-us') AS [Date] UNION
    SELECT N'فرانسه' AS Culture, FORMAT(@Date , 'D' , 'fr') AS [Date] UNION
    SELECT N'آلمان' AS Culture, FORMAT(@Date , 'D' , 'de') AS [Date]UNION
    SELECT N'چین' AS Culture, FORMAT(@Date , 'D' , 'zh') AS [Date]


    Screenshot 2023-12-09 094821.png

    شاید ورژن MS SQL شما خیلی پایین هست،
    تست کنین:
    PRINT @@VERSION

  7. #7
    کاربر دائمی آواتار mohammad diba
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    تهران
    سن
    42
    پست
    364

    نقل قول: تبدیل تاریخ میلادی به شمسی با دستور Format

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    چون تابع FORMAT از امکانات dot net استفاده میکنه و برای فرمت لازم نیست که اون زبان روی سیستم نصب باشه؛
    پس این که ریشه مشکل در نصب زبان فارسی باشه منتفی هست:
    DECLARE @Date date=GETDATE();

    SELECT N'ایران' AS Culture, FORMAT(@Date , 'D' , 'fa') AS [Date] UNION
    SELECT N'عربستان' AS Culture, FORMAT(@Date , 'D' , 'ar-sa') AS [Date] UNION
    SELECT N'انگلیس' AS Culture, FORMAT(@Date , 'D' , 'en-gb') AS [Date] UNION
    SELECT N'آمریکا' AS Culture, FORMAT(@Date , 'D' , 'en-us') AS [Date] UNION
    SELECT N'فرانسه' AS Culture, FORMAT(@Date , 'D' , 'fr') AS [Date] UNION
    SELECT N'آلمان' AS Culture, FORMAT(@Date , 'D' , 'de') AS [Date]UNION
    SELECT N'چین' AS Culture, FORMAT(@Date , 'D' , 'zh') AS [Date]


    Screenshot 2023-12-09 094821.png

    شاید ورژن MS SQL شما خیلی پایین هست،
    تست کنین:
    PRINT @@VERSION
    سلاممجدد و تشکر بسیار زیاد از راهنمایی ارزشمند شما
    نگارش 2017 است
    Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64)
    Aug 22 2017 17:04:49
    Copyright (C) 2017 Microsoft Corporation
    Enterprise Edition (64-bit) on Windows 8.1 Pro 6.3 <X64> (Build 9600: )

  8. #8
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,057

    نقل قول: تبدیل تاریخ میلادی به شمسی با دستور Format

    سلام دوباره و روز شما خوش

    پس مشکل ورژن هم نیست (و البته به احتمال قریب به یقین اگر ورژن سرور پایین بود کوئری اجرا نمیشد و خطا میداد).

    چیزی که به ذهن من میرسه این هست که MSSQL SERVER شما به CLR RUNTIME دسترسی نداره.

    بهتره اول مطمئن بشیم که ران تایم ها روی سیستم نصب هستن و درست کار میکنن:
    [system.environment]::version

    [system.threading.thread]::currentthread.currentculture = "fa"; get-date

    Screenshot 2023-12-12 195101.png
    اگر نتیجه مثل این تصویر بالا بود مشکلی در CLR RUNTIME نیست،
    اگر نوشته ها فارسی نیست از تنظیمات خود پاورشل فونت COURIER NEW رو انتخاب کنین،
    یا این که یک کالچر دیگه مثلا آلمان (de) یا فرانسه (fr) رو تست کنین.

    حالا clr رو روی MSSQL SERVER فعال کنین و نتیجه اش رو ببینین که آیا درست شده یا نه:
    sp_configure 'clr enabled', 1
    GO
    RECONFIGURE
    GO


    بررسی:
    SELECT * FROM sys.configurations
    WHERE name = 'clr enabled'


    رفرنس: Enabling CLR Integration

    --------------
    البته برای سیستم من clr enabled نیست!! و تابع Format هم کار میکنه.
    ولی محض احتیاط شاید سیستم شما باید enable باشه حتما.

  9. #9
    کاربر دائمی آواتار mohammad diba
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    تهران
    سن
    42
    پست
    364

    نقل قول: تبدیل تاریخ میلادی به شمسی با دستور Format

    نقل قول نوشته شده توسط mazoolagh مشاهده تاپیک
    سلام دوباره و روز شما خوش

    پس مشکل ورژن هم نیست (و البته به احتمال قریب به یقین اگر ورژن سرور پایین بود کوئری اجرا نمیشد و خطا میداد).

    چیزی که به ذهن من میرسه این هست که MSSQL SERVER شما به CLR RUNTIME دسترسی نداره.

    بهتره اول مطمئن بشیم که ران تایم ها روی سیستم نصب هستن و درست کار میکنن:
    [system.environment]::version

    [system.threading.thread]::currentthread.currentculture = "fa"; get-date

    Screenshot 2023-12-12 195101.png
    اگر نتیجه مثل این تصویر بالا بود مشکلی در CLR RUNTIME نیست،
    اگر نوشته ها فارسی نیست از تنظیمات خود پاورشل فونت COURIER NEW رو انتخاب کنین،
    یا این که یک کالچر دیگه مثلا آلمان (de) یا فرانسه (fr) رو تست کنین.

    حالا clr رو روی MSSQL SERVER فعال کنین و نتیجه اش رو ببینین که آیا درست شده یا نه:
    sp_configure 'clr enabled', 1
    GO
    RECONFIGURE
    GO


    بررسی:
    SELECT * FROM sys.configurations
    WHERE name = 'clr enabled'


    رفرنس: Enabling CLR Integration

    --------------
    البته برای سیستم من clr enabled نیست!! و تابع Format هم کار میکنه.
    ولی محض احتیاط شاید سیستم شما باید enable باشه حتما.
    سلام مجدد
    فقط یک چیز میتونم بکم و اون هم تشکر خالصانه است
    من تست کردم
    clr هم اوکی نیست
    یعنی جواب غلط داد
    احتمال داره چون ویندوزم 8.1 است مشکل داشته باشه؟
    عکس های ضمیمه عکس های ضمیمه
    • نوع فایل: png kk.png‏ (11.0 کیلوبایت, 23 دیدار)

  10. #10
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,057

    نقل قول: تبدیل تاریخ میلادی به شمسی با دستور Format

    سلام دوباره
    متاسفم که نتونستم ریشه مشکل رو تشخیص بدم و کمکی بکنم.

    من تست کردم
    clr هم اوکی نیست
    یعنی جواب غلط داد
    با توجه به تصویری که پیوست کردین نصب هست و درسته - پس مشکل از نصب sql server نیست.
    الان بنظر میاد اسم روز و ماه و وقت روز رو فارسی آورده که به خاطر فونت درست دیده نمیشه.
    برای اطمینان از این که اون اسامی فارسی شده متاثر از regional settings نیست،
    با کالچر de هم تست کنین (حالا هر زبانی که مطمنا روی سیستم نصب نیست).


    احتمال داره چون ویندوزم 8.1 است مشکل داشته باشه؟
    بعید میدونم. اینجور چیزها باید روی همه ورژن های ویندوز کار کنه.

    با این وجود من روی سیستم ویندوز 8.1 sql server نصب و تست میکنم و نتیجه رو همیجا میگم تا مطمئن بشین.

  11. #11
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,057

    نقل قول: تبدیل تاریخ میلادی به شمسی با دستور Format

    احتمال داره چون ویندوزم 8.1 است مشکل داشته باشه؟
    روی سیستم ویندوز 8.1 sql server نصب و تست میکنم و نتیجه رو همیجا میگم
    گویا همینجور بود که خودتون حدس زده بودین:
    در ویندوز 8.1 فرمت تاریخ روی کالچر fa کار نمیکنه!
    البته در برنامه ها چون از globalization.persiancalendar استفاده میکنیم متوجه این مورد نشده بودم.

    نمیدونم با توجه به اینکه مدتی هست که دیگه 8.1 پشتیبانی نمیشه تا چه اندازه در آپگرید به ویندوز 10 یا 11 دستتون بازه.
    اگر واقعا محدود به همین 8.1 هستین، میتونین خودتون تابع تبدیل بنویسین، همینجور که از قدیم هم مجبور به این کار بودن.
    فکر کنم جستجو کنین تابع آماده پیدا میشه، ولی پیشنهاد میکنم این کار رو نکنین!
    بیشتر این توابع مشکل محاسبه یا پرفورمنس یا هر دو رو دارن.

    خیلی بهتر هست اگر در کدنویسی دستی دارین یک کتابخانه براساس همین persiancalendar با #C بنویسین و توابع خودتون رو بسازین،
    بعد اون رو به sql server معرفی کنین تا این توابع رو بشناسه.

  12. #12
    کاربر دائمی آواتار mohammad diba
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    تهران
    سن
    42
    پست
    364

    نقل قول: تبدیل تاریخ میلادی به شمسی با دستور Format

    سلام دوست عزیز
    خیلی خیلی ممنون از لطفتتون
    بزرگانی مثل شما شایسته ستایش هستن
    برقرار باشید و پایدار

  13. #13
    کاربر تازه وارد
    تاریخ عضویت
    مهر 1389
    محل زندگی
    تهران
    پست
    75

    Post نقل قول: تبدیل تاریخ میلادی به شمسی با دستور Format

    نقل قول نوشته شده توسط mohammad diba مشاهده تاپیک
    سلام بر دوستان عزیز و خوبم
    ظاهرا برای تبدیل تاریخ میلادی به شمسی می توان از دستور Format استفاده کرد مطابق زیز

    <code>
    DECLARE @today DATE = GETDATE();
    SELECT FORMAT( @today, 'yyyy-MM-dd', 'fa-IR' ) -- ۱۴۰۰-۰۱-۰۵
    SELECT FORMAT( @today, 'yyyy-MMM', 'fa-IR' ) --۱۴۰۰-فروردین
    SELECT FORMAT( @today, 'yyyy-MM-dd-dddd', 'fa-IR' ) --۱۴۰۰-۰۱-۰۵-پنجشنبه

    <code/>
    ولی برای من عمل نکرد و همون تاریخ میلادی رو داد مشکل کجاست؟
    سلام از اين فانكشن استفاده كنيد ببينيد آيا جواب ميده
    create or ALTER FUNCTION [dbo].[PersianDate]
    (
    @date DATETIME


    )
    RETURNS VARCHAR(10)
    AS
    BEGIN
    DECLARE @result VARCHAR(10)
    SET @result =format(@date, 'yyyy/MM/dd', 'fa')


    RETURN @Result


    END

  14. #14
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    سن
    71
    پست
    3,057

    نقل قول: تبدیل تاریخ میلادی به شمسی با دستور Format

    از اين فانكشن استفاده كنيد ببينيد آيا جواب ميده
    شما مشخصا هیچ پستی از این بحث رو نخوندین و مطلب رو نگرفتین که چی هست!

تاپیک های مشابه

  1. معادل دستور format ویژوال بیسیک در asp چیست ؟؟
    نوشته شده توسط RNazemi در بخش Classic ASP
    پاسخ: 1
    آخرین پست: چهارشنبه 19 آذر 1393, 17:04 عصر
  2. کمک در مورد دستور bulk inser و format file
    نوشته شده توسط mr.siahatgar در بخش T-SQL
    پاسخ: 1
    آخرین پست: جمعه 04 شهریور 1390, 13:34 عصر
  3. نکته عجیب در مورد دستور Format
    نوشته شده توسط hossein-khoshseyar در بخش VB.NET
    پاسخ: 0
    آخرین پست: پنج شنبه 01 اردیبهشت 1390, 21:50 عصر
  4. سوال: دستورات new , string.format و ...
    نوشته شده توسط seyyedalith در بخش C#‎‎
    پاسخ: 4
    آخرین پست: جمعه 05 مهر 1387, 04:56 صبح
  5. مشکل در دستور Format
    نوشته شده توسط mahmoodreza در بخش برنامه نویسی در 6 VB
    پاسخ: 4
    آخرین پست: شنبه 25 مهر 1383, 17:07 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •