สอบถาม กูรู มีใครรู้ คำสั่ง ให้ SQL Show วันที่ เป
กระทู้เก่าบอร์ด อ.Yeadram

 16,382   11
URL.หัวข้อ / URL
สอบถาม กูรู มีใครรู้ คำสั่ง ให้ SQL Show วันที่ เป

คือ ผม จะ ดึงวันที่ ใน SQL

Select convert(Varchar,ShowDate,106) from Table1

มันจะ โชว์ วันที่ เป็น

27 Sep 2011

แต่ผมต้องการให้ โชว์ เป็น

27 กันยายน 2554

ผมต้องใช้ คำสั่งอะไรครับ

ป.ล. ใช้ ใน ListBox   Access Project ครับ

11 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R11138
เสนอ 2 วิธีครับ
1) เปลี่ยน region setting
2) สร้าง Function เพื่อแปลง format ครับ
2 @R11144
1. โปรแกรม ทำงาน แบบ Client Sever จุดประสงค์ คือ เครื่องลูก มีั ทั้ง Regional แบบ ไทย กับ อังกฤษ เนื่องจาก มี บาง App ในตัวเครื่องลูก ต้องการ Regional English ถึงจะทำงานได้

2. Function แปลง Format ทำอย่างไร รบกวน ช่วยบอกทีครับ
พอดี เพิ่ง เริ่มใช้ Access Project   เดิม ทำแต่ Access MDB
ใน Access MDB ใช้ คำสั่ง Format ( DateTime, "dd mmmm yyyy" ) ได้เลย มัน ก้ ขึ้นให้ ตาม Regional ของ ตัว Client
3 @R11150
Code ที่ผมเขียนนะครับ - แบบไม่เต็ม 100% นะครับ ลองศึกษาดู

Function MyDateFormat(pDate As Variant) As String
'Create by PichaiTC (uncomplet version)
Dim strReturn As String
Dim lngYear As Long

    lngYear = Year(pDate) 'Change Year A.D. to B.C.
    If lngYear < 2000 Then
        lngYear = lngYear + 543
    End If
       
    strReturn = Format(pDate, "dd ") & MonthNameThai(Month(pDate)) & Format(lngYear, " 0000")
    End If

ExitFunction:
    CDateToSQL = strReturn
End Function


Function MonthNameThai(ByVal MonthNumber) As String
    If Not IsNull(MonthNumber) Then
        Select Case MonthNumber
            Case 1
               MonthNameThai = "มกราคม"
...
            Case Else
               MonthNameThai = ""
        End Select
    End If
End Function
4 @R11167
จากการอ่านในบอร์ดนี้ ผมเจอฟังก์ชั่นของท่าน yeadram ที่เช็คว่าเครื่องที่ใช้งานอยู่เป็น Region อะไร แล้วก็สามารถนำมาแปลง ปี ค.ศ. หรือ พ.ศ. ได้
แล้วจากที่ท่าน PichaiTC เขียนฟังก์ชั่นเปลี่ยนชื่อเดือนให้เป็นภาษาไทย ก็สามารถทำได้ประมาณนี้นะครับ
- เขียนฟังก์นี้ลงใน Module (เครดิต ท่าน yeadram)

Public Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
Public Declare Function GetLocaleInfo Lib "kernel32" _
   Alias "GetLocaleInfoA" _
(ByVal Locale As Long, _
   ByVal LCType As Long, _
   ByVal lpLCData As String, _
   ByVal cchData As Long) As Long

Public Function GetUserLocaleInfo(ByVal dwLocaleID As Long, ByVal dwLCType As Long) As String
   Dim sReturn As String
   Dim r As Long
   r = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn))
   If r Then
      sReturn = Space$(r)
      r = GetLocaleInfo(dwLocaleID, dwLCType, sReturn, Len(sReturn))
      If r Then GetUserLocaleInfo = Left$(sReturn, r - 1)
   End If
End Function

Public Function mYear(ByVal yourDate As Date) As Long
    mYear = Year(yourDate)
    If GetUserLocaleInfo(GetSystemDefaultLCID(), &H1009) = 7 Then mYear = Year(yourDate) - 543
End Function

Public Function bYear(ByVal yourDate As Date) As Long
bYear = Year(yourDate)
If GetUserLocaleInfo(GetSystemDefaultLCID(), &H1009) <>7 Then bYear = Year(yourDate) + 543
End Function
5 @R11168
เป็นการตรวจสอบดูว่าเครื่องของผู้ใช้ ใช้เป็น พ.ศ. หรือ ค.ศ. ถ้าเป็น ค.ศ. ก็ให้บวก 543 ประมาณนี้
- จากนั้นก็เขียนฟังก์ชั่นของท่าน PichaiTC ตามนี้ครับ
Function MonthNameThai(ByVal yourDate) As String
    If Not IsNull(yourDate) Then
        yourDate = Format(yourDate, "m")
        Select Case yourDate
            Case 1
               MonthNameThai = "มกราคม"
            Case 2
               MonthNameThai = "กุมภาพันธ์"
            Case 3
               MonthNameThai = "มีนาคม"
            Case 4
               MonthNameThai = "เมษายน"
            Case 5
               MonthNameThai = "พฤษภาคม"
            Case 6
               MonthNameThai = "มิถุนายน"
            Case 7
               MonthNameThai = "กรกฎาคม"
            Case 8
               MonthNameThai = "สิงหาคม"
            Case 9
               MonthNameThai = "กันยายน"
            Case 10
               MonthNameThai = "ตุลาคม"
            Case 11
               MonthNameThai = "พฤศจิกายน"
            Case 12
               MonthNameThai = "ธันวาคม"
            Case Else
               MonthNameThai = ""
        End Select
    End If
End Function
- อันนี้ดูง่ายไม่ต้องอธิบายนะครับ
6 @R11169
Function
mYear() คือ แปลงเป็น ค.ศ.
bYear() คือ แปลงเป็น พ.ศ.
MonthNameThai คือ เปลี่ยนชื่อเดือนเป็นภาษาไทย

=Format([Date_Save],"dd/") & MonthNameThai([Date_Save]) & "/" & bYear([Date_Save])

ประมาณนี้นะครับ
เครดิต: yeadram และ PichaiTC
7 @R11172
คือ ทั้งหมดนี้ มัน ทำใน
Query ที่เป็น Access MDB ครับ


ผม ใช้ Access Project ต้องใช้ คำสั่ง MS SQL ของ Microsoft อะครับ

Function Format ใช้ไม่ได้ ใน Query ของ Access Project ครับ
8 @R11207
ผม ทดลอง ทำ SQL user-define Function
เพื่อ ใช้ ใน Access Project

แต่ ไม่รู้ ต้อง บันทึก ตรงส่วนไหน ครับ


CREATE FUNCTION ThaiDateFormat
   (@DateTimeGet AS Varchar(8), @FormatDate AS Varchar(20)) RETURNS Varchar(40)

AS
BEGIN
   DECLARE @ThaiDATEtext VARCHAR(40)
   DECLARE @TDD Varchar(2) DECLARE @TMMMM VARCHAR(16)
   DECLARE @TYYYY VARCHAR(4)
   SET @TDD = RIGHT(@DateTimeGet, 2)
   SET @TMMMM = LEFT(RIGHT(@DateTimeGet, 4), 2)
   SET @TYYYY = LEFT(@DateTimeGet, 4)

   IF @TYYYY < '2500'
       SET @TYYYY = CONVERT(VARCHAR(4), CONVERT(INT, @TYYYY) + 543)
   IF @FormatDate = 'Short'
       SET @TMMMM = CASE @TMMMM
           WHEN '01' THEN 'มกราคม'
           WHEN '02' THEN 'กุมภาพันธ์'
           WHEN '03' THEN 'มีนาคม'
           WHEN '04' THEN 'เมษายน'
           WHEN '05' THEN 'พฤษภาคม'
           WHEN '06' THEN 'มิถุนายน'
           WHEN '07' THEN 'กรกฎาคม'
           WHEN '08' THEN 'สิงหาคม'
           WHEN '09' THEN 'กันยายน'
           WHEN '10' THEN 'ตุลาคม'
           WHEN '11' THEN 'พฤศจิกายน'
             ELSE 'ธันวาคม' END

ELSE

   SET @TMMMM = CASE @TMMMM
      WHEN '01' THEN 'ม.ค.'
      WHEN '02' THEN 'ก.พ.'
      WHEN '03' THEN 'มี.ค.'
      WHEN '04' THEN 'เม.ย.'
      WHEN '05' THEN 'พ.ค.'
      WHEN '06' THEN 'มิ.ย.'
      WHEN '07' THEN 'ก.ค.'
      WHEN '08' THEN 'ส.ค.'
      WHEN '09' THEN 'ก.ย.'
      WHEN '10' THEN 'ต.ค.'
      WHEN '11' THEN 'พ.ย.'
        ELSE 'ธ.ค.' END

   SET @ThaiDATEtext = @TDD + ' ' + @TMMMM + ' ' + @TYYYY
   RETURN (@ThaiDATEtext)

END
GO


วานผู้รู้ ช่วยบอกด้วย ครับ
9 @R11220
ทำได้แล้ว ครับ

10 @R11225
ขอร่วมแชร์จากที่เคยได้รู้มาครับ
การเขียน Function ใน MSSQL

create function ThaiDate (@date datetime) returns nvarchar(100)
as
begin
declare @d1 nvarchar(3),@m1 nvarchar(25), @y1 nvarchar(4)
select @d1= convert(nvarchar(3),day(@date))
select @m1 = case   month(@date)     when 1 then N'มกราคม'                                  
                                             when 2 then N'กุมภาพันธ์'                                  
                                             when 3 then N'มีนาคม'                                  
                                             when 4 then N'เมษายน'                                  
                                             when 5 then N'พฤษภาคม'                                  
                                             when 6 then N'มิถุนายน'                                  
                                             when 7 then N'กรกฎาคม'                                  
                                             when 8 then N'สิงหาคม'                                  
                                             when 9 then N'กันยายน'                                   
                                             when 10 then N'ตุลาคม'                                  
                                             when 11 then N'พฤศจิกายน'                                  
                                             when 12 then N'ธันวาคม'                                 
                                             end
     select @y1 = convert(nvarchar(4),year(@date) + 543 )   
     return @d1 + ' ' + @m1 + ' ' + @y1
end
---------test function
select dbo.Thaidate(GETDATE())

ปล. N ช่วยให้อ่านภาษาไทยได้ถูกต้อง
11 @R21673
@sjs ขอบคุณค่ะ
@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.3053s