กระทู้เก่าบอร์ด อ.Yeadram
        
           17,313   11		  
          
					  
		    URL.หัวข้อ / 
		    URL
        
        สอบถาม กูรู มีใครรู้ คำสั่ง ให้ SQL Show วันที่ เป      
    
      คือ ผม จะ ดึงวันที่ ใน SQL
Select convert(Varchar,ShowDate,106) from Table1
มันจะ โชว์ วันที่ เป็น
27 Sep 2011
แต่ผมต้องการให้ โชว์ เป็น
27 กันยายน 2554
ผมต้องใช้ คำสั่งอะไรครับ
ป.ล. ใช้ ใน ListBox Access Project ครับ
    
  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 
				
        
    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
    
  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
    
    
  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
    
  แล้วจากที่ท่าน 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
- อันนี้ดูง่ายไม่ต้องอธิบายนะครับ
    
  - จากนั้นก็เขียนฟังก์ชั่นของท่าน 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
    
  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 ครับ
    
  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
วานผู้รู้ ช่วยบอกด้วย ครับ
    
  เพื่อ ใช้ ใน 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 ช่วยให้อ่านภาษาไทยได้ถูกต้อง
    
  การเขียน 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 ขอบคุณค่ะ    
    
  
      Time: 0.0746s
    
      
		
1) เปลี่ยน region setting
2) สร้าง Function เพื่อแปลง format ครับ