command ในการเขียน function ของ Mysql

June 19th, 2011

พอดีได้ลองเขียน function ของ Mysql ก็แนวใน Oracle ครับ แต่ คำสั่งจะต่างกันบ้าง ก็เลยค่อยๆ เอามาลงเก็บไว้เป็น knowlelge-based และจะเอามาลงในนี้เรื่อยๆ เท่าที่ได้ลอง

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
- CONCAT : อันนี้ใช้คำนี้กันเกือบทุกภาษาครับไม่มีปัญหาการใช้เท่าไหร
เช่น
mysql> SELECT CONCAT('FIRST ', 'SECOND');
mysql> SELECT CONCAT(id, name, work_date) FROM employee_tbl;
 
- LPAD : ใช้คืนค่า sentence ที่มีขนาดจำนวนตัวอักษรเท่ากับ length
function:LPAD(sentence,length,word)
content:ใช้คืนค่า sentence ที่มีขนาดจำนวนตัวอักษรเท่ากับ length
	โดยถ้ามีน้อยกว่าก็จะเพิ่มค่าของ word เข้าไปทางซ้ายจนกว่า sentence จะมีจำนวนตัวอักษรเท่ากับ length
example:SELECT LPAD(199,4,0)
 
- DATE_FORMAT : ใช้จัดรูปแบบวันที่ให้เป็นไปตาม format ที่กำหนด
function:DATE_FORMAT(date,format)
content:ใช้จัดรูปแบบวันที่ให้เป็นไปตาม format ที่กำหนด
โดย format มีค่าที่เป็นไปได้ ดังนี้
	%W แทนความหมาย ชื่อวันภาษาอังกฤษ (Sunday,...,Saturday)
	%a แทนความหมาย ชื่อวันภาษาอังกฤษ (Sun,...,Sat)
	%b แทนความหมาย ชื่อเดือนภาษาอังกฤษ (Jan,...,Dec)
	%w แทนความหมาย วันที่ของสัปดาห์ (0,1,...,6) โดย 0 เริ่มจาก วันอาทิตย์
	%j แทนความหมาย วันที่ของปี (001,002,...,366)
	%D แทนความหมาย วันที่ตามด้วย suffix ภาษาอังกฤษ (1st,2nd,3rd,..)
	%d แทนความหมาย วันที่ของเดือน (01,02,...,31)
	%e แทนความหมาย วันที่ของเดือน (1,2,...,31)
	%Y แทนความหมาย ปีคริสต์ศักราชแบบ 4 หลัก
	%y แทนความหมาย ปีคริสต์ศักราชแบบ 2 หลัก
	%X แทนความหมาย ปีคริสต์ศักราชสำหรับสัปดาห์ซึ่งวันอาทิตย์เป็นวันแรกของสัปดาห์
	%x แทนความหมาย ปีคริสต์ศักราชสำหรับสัปดาห์ซึ่งวันจันทร์เป็นวันแรกของสัปดาห์
	%m แทนความหมาย เดือนที่ของปี (01,02,...,12)
	%c แทนความหมาย เดือนที่ของปี (1,2,...,12)
	%r แทนความหมาย เวลาแบบ 12 ชั่วโมง รูปแบบคือ hh:mm:ss AM|PM
	%T แทนความหมาย เวลาแบบ 24 ชั่วโมง รูปแบบคือ hh:mm:ss
	%H แทนความหมาย ชั่วโมงที่ (00,01,...,23)
	%k แทนความหมาย ชั่วโมงที่ (0,1,...,23)
	%h แทนความหมาย ชั่วโมงที่ (01,02,...,12)
	%I แทนความหมาย ชั่วโมงที่ (01,02,...,12)
	%l แทนความหมาย ชั่วโมงที่ (1,2,...,12)
	%i แทนความหมาย นาทีที่ (00,01,...,59)
	%S แทนความหมาย วินาทีที่ (00,01,...,59)
	%s แทนความหมาย วินาทีที่ (00,01,...,59)
	%p แทนความหมาย AM หรือ PM
	%U แทนความหมาย สัปดาห์ที่ของปี (0,1,...,52) โดยเริ่มนับวันอาทิตย์เป็นวันแรกของสัปดาห์
	%u แทนความหมาย สัปดาห์ที่ของปี (0,1,...,52) โดยเริ่มนับวันจันทร์เป็นวันแรกของสัปดาห์
	%V แทนความหมาย สัปดาห์ที่ของปี (1,2,...,53) โดยเริ่มนับวันอาทิตย์เป็นวันแรกของสัปดาห์
	%v แทนความหมาย สัปดาห์ที่ของปี (1,2,...,53) โดยเริ่มนับวันจันทร์เป็นวันแรกของสัปดาห์
	%% แทนความหมาย %
	example:SELECT DATE_FORMAT(CURDATE(), '%y')+43 as AD

การสร้าง sequence ใน MySQL

June 15th, 2011

บางครั้งทำงานใน MySQL แต่ติดการใช้ Sequence แบบใน Oracle ซะแล้ว ก็เลยหาวิธีใช้ ปรากฏว่าพริกแพลงได้ตามนี้ครับ

1. สร้าง Table สำหรับใช้เป็นที่เก็บ sequence

1
2
3
4
5
CREATE TABLE `agt_sequence` (
`seq_name`  varchar(64) PRIMARY KEY ,
`seq_val`  bigint(20) UNSIGNED NOT NULL ,
PRIMARY KEY (`seq_name`)
)

2. ผมจะสร้าง Function เพื่อจัดการกับ Table sequence เพื่อให้สะดวกต่อการนำมาใช้งาน

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
CREATE FUNCTION `agt_nextval`(`v_seq_name` varchar(64),`v_char_length` bigint)
 RETURNS varchar(64) CHARSET utf8
    MODIFIES SQL DATA
    SQL SECURITY INVOKER
BEGIN
	DECLARE tp_seq_name VARCHAR(64);
	DECLARE tp_seq_val BIGINT(20);
 
	SELECT seq_name,
		seq_val + 1 AS seq_val
	INTO tp_seq_name,
		tp_seq_val
	FROM agt_sequence
	WHERE seq_name = v_seq_name
	LIMIT 1
	FOR UPDATE;
 
	UPDATE agt_sequence
	SET seq_val = tp_seq_val
	WHERE seq_name = v_seq_name;
 
	RETURN LPAD(tp_seq_val,v_char_length,0);
END;
1
2
3
คำอธิบาย
v_seq_name = ค่าที่อยู่ใน table sequence เพื่อใช้ในการเป็นเงื่อนไขในการดึงค่าของ sequence ขึ้นมา
v_char_length = ค่าจำนวนตัวอักษรที่จะให้ return เช่น v_char_length = 3 ค่าที่จะ return จะเป็นได้ 001, 002, ... , 999

สามารถเอาไปเทสได้ ดังนี้

1
SELECT agt_nextval( 'a',4 )

ผลลัพธ์

1
2
|agt_nextval('a',4)|
|0028|

เป็นไงครับพอมองออกหรือปล่าว ยังไงลองเอาไปประยุกต์ใช่กันดูนะครับ เพราะแต่ละคน การเอาไปใช้ การเขียนขึ้นมา จะไม่เหมือนกัน

Spring AOP tutorial

March 31st, 2011

Spring AOP tutorial

Spring AOP tutorial – Part 1 | Aspect Oriented Programming Tutorial Part -1

Spring AOP tutorial – Part 2 | Aspect Oriented Programming Tutorial – Part 2