Get Adobe Flash player

sarinya.k

SQL : การเปลี่ยน Datetime Format

ปกติแล้วการเก็บค่าวันที่ต่างๆ ที่จัดเก็บในจะเก็บรูปแบบค่า Datetime ซึ่งอาจจะมีรูปแบบการเก็บที่อาจไม่ตรงกับที่เราต้องการ หากทำการเรียกดูค่าด้วยการ select ค่าตามปกติ

แต่ถ้าหากเราต้องการ select ค่าวันที่มาแสดงใน format หรือรูปแบบอื่นๆ เราสามารถเขียนโค้ดเพื่อเรียกดูค่าวันที่ในรูปแบบอื่นๆได้โดยใช้โค้ด

SELECT CONVERT(ชนิดข้อมูลที่เป็นstring, ชื่อคอลัมน์ที่จัดเก็บข้อมูลDatetimeที่ต้องการ, เลขรูปแบบformatที่ต้องการ)

 

ซึ่งตัวเลขค่า Format แต่ละค่า จะแสดงผลลัพท์ตามตาราง ดังนี้

Credit : https://www.mssqltips.com/sqlservertip/1145/date-and-time-conversions-using-sql-server/

SQL : การลบค่าซ้ำจากการใช้ฟั่งชั่นตรวจสอบ record ซ้ำในตาราง

จากที่เคยเขียนบทความเรื่องการตรวจสอบ record ซ้ำในตอนที่แล้วว่า

SELECT *, ROW_NUMBER() OVER ( PARTITION BY ชื่อcolที่ใช้เป็นเงื่อนไข

ORDER BY ชื่อcolที่ใช้เป็นเงื่อนไข) AS ชื่อcolตั้งใหม่

FROM ชื่อตาราง

จากโค้ดในรูปแบบนี้ จะแสดงจำนวน record ที่มีค่าซ้ำ แสดงในคอลัมน์ใหม่แยกต่างหาก จากการใช้โค้ดในรูปแบบนี้ สามารถนำมาใช้เป็นเงื่อนไข
ในการลบ record ที่มีค่าซ้ำออกไปด้วยการสร้าง CTE หรือนิพจน์ตาราง ดังนี้

WITH ชื่อCTE  AS
(
….โค้ดในการตรวจสอบค่าซ้ำ
)
DELETE FROM ชื่อCTE
WHERE ชื่อcolที่ใช้นับrowที่เป็นค่าซ้ำ > 1

ตัวอย่าง

WITH CTE AS
(
SELECT *,ROW_NUMBER() OVER (PARTITION BY CITIZEN_ID
ORDER BY CITIZEN_ID) AS RN
FROM EMPLOYEE
)
DELETE FROM CTE
WHERE RN > 1

โค้ดที่แสดงค่าซ้ำ จะนับ row ที่มีค่าต่างๆซ้ำกันเรียงไปแล้วนำมาแสดงในคอลัมน์ RN จากนั้นจะทำการลบ record ที่มีค่า RN มากกว่า 1 (หรือก็คือแถวที่เป็นค่าซ้ำ)ออกไป หลังจากลบแล้ว record จะเหลือแค่ record ที่มีค่า RN = 1 เท่านั้น

 

 

 

 

 

SQL : การตรวจสอบ record ซ้ำในตาราง (2)

จากที่เคยเขียนบทความเรื่องการตรวจสอบ record ซ้ำในตารางด้วยคำสั่ง SQL Command ด้วยคำสั่ง

SELECT ชื่อcolที่ใช้เป็นเงื่อนไข , COUNT(*) count

FROM ชื่อตาราง

GROUP BY ชื่อcolที่ใช้เป็นเงื่อนไข Having COUNT(*) > 1

ซึ่งเมื่อใช้แล้วจะแสดงผลลัพธ์เฉพาะค่า record ที่มีจำนวนมากกว่า 1 แถว พร้อมนับจำนวนแถวที่ซ้ำขึ้นมาแสดง แต่ทั้งนี้ นอกจากคำสั่งดังกล่าวแล้ว ยังมีโค้ดคำสั่งแบบอื่นที่สามารถเรียกใช้เพื่อดูค่า record ซ้ำได้เช่นกัน นั่นคือ

SELECT *, ROW_NUMBER() OVER ( PARTITION BY ชื่อcolที่ใช้เป็นเงื่อนไข

ORDER BY ชื่อcolที่ใช้เป็นเงื่อนไข) AS ชื่อcolตั้งใหม่

FROM ชื่อตาราง

ตัวอย่าง

SELECT *, ROW_NUMBER() OVER ( PARTITION BY CITIZEN_ID

ORDER BY CITIZEN_ID) AS RN

FROM EMPLOYEE

ในโค้ดคำสั่งนี้ จะแสดงผลลัพธ์แถว record ที่มีค่าซ้ำขึ้นมาเช่นกัน แต่ต่างกับโค้ดคำสั่งแรกตรงที่จะเป็นการดึงผลลัพธ์ขึ้นมาแสดงทั้งหมด แล้วจึงนับแถวที่มีค่าซ้ำเรียงกันไป ไม่แสดงเฉพาะแถวที่มีค่าซ้ำ

SQL : การ Replace ข้อความจากข้อมูลทุก record ใน Column

ในการแทนที่ตัวอักษร ข้อความ หรือ string ใดๆบนทุก record ในคอลัมน์ใดคอลัมน์หนึ่งบน SQL สามารถกระทำได้เช่นเดียวกับฟังก์ชั่นการ find and replace บนโปรแกรมอื่นๆ ด้วยรูปแบบคำสั่งดังนี้

รูปแบบคำสั่ง

UPDATE ชื่อตาราง

SET ชื่อColumnที่ต้องการ = REPLACE([ชื่อColumnที่ต้องการ], ‘[ค่า String เดิม]’, ‘[ค่า String ใหม่]’)

WHERE เงื่อนไข (ถ้ามี)

ในการใช้ชุดคำสั่งนี้จะเป็นการ Replace ข้อความโดยทำการ search หาจากค่า string ที่ต้องการแก้จากทุกๆ record ในคอลัมน์นั้น ด้วยค่า string ใหม่
เหมาะกับการแก้ข้อมูลบางส่วนหรือลบอักขระบางตัวจากในคอลัมน์ (โดยคงค่าข้อมูลเดิมเอาไว้ด้วย)
เช่น การลบเครื่องหมาย – ออกจากทุก record ในคอลัมน์เบอร์โทรศัพท์ , การเปลี่ยนเครื่องหมายแทนการคูณจาก * เป็น x สำหรับทุกๆ record เป็นต้น

แก้ปัญหาสระลอยบน Photoshop

การพิมพ์ตัวหนังสือบน Photoshop บางครั้งผู้ใช้งานอาจจะพบปัญหาสระลอย หรืออาการที่สระหรือวรรณยุกต์อยู่ในต่ำแหน่งที่สูงหรือต่ำเกินไป ทำให้พิมพ์ออกมาแล้วดูไม่สวยงามหรืออ่านยาก แม้ว่าใน Photoshop จะสามารถตัดต่อแบบรูปภาพได้ แต่ในที่นี้ก็มีอีกวิธีที่สามารถแก้ไขได้ที่ตัวข้อความได้เลย

 

ขั้นตอนในการแก้ไขสระลอย

1. ทำการเลื่อน cursor ไปอยู่หลังตัวอักษรหรือวรรณยุกต์ที่ต้องการ
2. กดปุ่ม shift ค้างไว้
3. กดปุ่มลูกศร ไปทางซ้ายเพื่อทำการเลือกจุดที่ต้องการแก้ไข
4. ให้กดปุ่ม Alt ค้างไว้อีกปุ่ม โดยที่ยังกดปุ่ม shift ค้างอยู่
5. จากนั้นให้กดลูกศรชี้บนหรือชี้ลงล่างเพื่อทำการเลื่อนตามใจชอบ
ซึ่งวิธีนี้ นอกจากจะใช้แก้ปัญหาสระหรือวรรณยุกต์ลอยได้แล้ว ยังสามารถใช้กับตัวอักษรได้อีกด้วย

SQL : การ Copy ข้อมูลจาก Column ไปยังอีก Column

ในการ Copy  ข้อมูลจากคอลัมน์ไปยังอีกคอลัมน์ ในที่นี้จะหมายถึงการทำสำเนาข้อมูลทั้งหมดในคอลันน์นั้น ซึ่งเหมาะกับการทำงานกับจำนวนข้อมูลมากๆ ทำให้ผู้ใช้งานไม่ต้องเสียเวลาในการระบุ Value ของแต่ละ record

รูปแบบคำสั่ง

UPDATE ชื่อตาราง

SET ชื่อColumnB = ชื่อColumnA

WHERE เงื่อนไข (ถ้ามี)

ในการใช้ชุดคำสั่งนี้จะเป็นการ Copy ข้อมูลทั้งหมดในคอลัมน์ จากคอลัมน์ A ไปยังอีก B ภายในตารางเดียวกัน
ซึ่งข้อมูลที่จำเป็นต้องระบุหลักๆจะมีเพียงชื่อตาราง แล้วก็คอลัมน์ที่ใช้เป็นต้นแบบ และชื่อคอลัมน์ปลายทางที่จะนำสำเนาข้อมูลไปเก็บไว้
โดยที่สามารถระบุเงื่อนไขในการ Copy ได้ภายใต้เงื่อนไขหลังคำสั่ง WHERE

ซึ่งหากเป็นการ Copy ข้อมูลจากคอลัมน์จากตารางอื่น จะใช้รูปแบบคำสั่งนี้

รูปแบบคำสั่ง

UPDATE ชื่อตารางB

SET ชื่อColumnB = (SELECT ชื่อColumnA FROMชื่อตารางA

WHERE ชื่อตารางB.ชื่อColumnIDของB = ชื่อตารางA.ชื่อColumnIDของA)

จะเห็นได้ว่า การ Copy ข้อมูลจากอีกตารางมา จะต้องมีการ Select ค่าซ้อนภายใต้วงเล็บก่อนที่จะเอามาเทียบค่ากับคอลัมน์ B บนตาราง B
ซึ่งจะต้องมีการเช็คค่าด้วยคอลัมน์ตัวกลางอีกตัวหนึ่งว่าสองตารางมีค่าตรงกัน (ให้เสมือนว่าสองตารางเชื่อมกันอยู่)

SQL : การใช้ CASE WHEN

CASE WHEN เป็นรูปแบบคำสั่งในการเช็คเงื่อนไขเพื่อการแสดงผลในรูปแบบ SQL ซึ่งถ้าเปรียบเป็นการเขียนโค้ดในภาษาอื่นๆทั่วไปก็คือการเช็คเงื่อนไขแบบ IF…ELSE… นั่นเอง

 

รูปแบบคำสั่ง

SELECT
CASE WHEN เงื่อนไข(1) THEN คำสั่ง(1)
WHEN เงื่อนไข(2) THEN คำสั่ง(2)
WHEN เงื่อนไข(3) THEN คำสั่ง(3)
….

ELSE คำสั่งอื่นๆกรณีที่ไม่เข้าเงื่อนไขใด END AS ชื่อฟิลด์ที่ต้องการ
FROM ชื่อตาราง

ในการกำหนดเงื่อนไข จะเขียนหลัง WHEN ซึ่งหากเงื่อนไขถูกต้อง คำสั่งจะทำตาม THEN
แต่ถ้าไม่ถูกต้อง ก็จะไม่มีการทำตามคำสั่งหลัง THEN ของเงื่อนไขนั้นๆ แล้วจะไปเช็คเงื่อนไขถัดไปของคำสั่ง WHEN
โดย WHEN สำหรับเงื่อนไขแรกจะขึ้นต้นด้วย CASE WHEN ส่วนเงื่อนไขถัดๆไปจะเขียนด้วย WHEN
และถ้าสุดท้ายไม่เข้าเงื่อนไขใดๆเลยก็จะทำตามคำสั่งของ ELSE จากนั้นให้ปิด syntax การเช็คเงื่อนไขด้วย END

 

อธิบายตัวอย่างการใช้

สมมติ กรณีนี้เราต้องการดึงค่า citizen_id มาจาก employee โค้ดข้างต้นจะหมายถึง
สร้างเงื่อนไขว่า หากค่า id_card ไม่เป็นค่าว่าง และ nation_code เป็น TH ให้ดึงค่าจาก  id_card มาแสดง
แต่ถ้าหาก id_card ไม่เป็นค่าว่าง และ nation_code ไม่เป็น TH ให้ดึงค่าจาก  pass_id มาแสดง
แต่ถ้าไม่เข้าสองเงื่อนไขแรก (เช่น id_card เป็นค่าว่าง) ก็ให้แสดงคำว่า Unknown!! แทน

 

 

Devexpress – สร้างตัวเลือกปีบน Dropdown / Combobox

ในกรณีที่เป็นตัวเลือกปีที่จะมีการเปลี่ยนแปลงตลอดเวลา เราจะใช้การ datasource ดึงข้อมูลปีปัจจุบันจากข้อมูล DateTime ดังนี้

เมื่อกำหนดค่าและทำการ datasource จะได้ drop down หรือ combo box ที่แสดงค่าปีปัจจุบันตามที่กำหนด (ในที่นี้เลือกแสดงค่าเป็นปี พ.ศ.)

และเมื่อทำการกดที่ลูกศรทางขวาเพื่อดูตัวเลือก ก็จะแสดงตัวเลือกตามที่กำหนดไว้

 

การสร้าง Brush ใช้เองบน Photoshop

กรณีที่ผู้ใช้อยากได้ brush ที่เป็นลวดลายเฉพาะ หรือในรูปแบบที่ถูกใจ สามารถทำตามขั้นตอนได้ดังนี้

 

1. เลือกรูปที่ต้องการนำมาทำเป็น brush โดยทำการ crop รูปให้ได้ขนาดตามต้องการ

2. กดเลือกคำสั่งที่เมนู Edit > Define Brush Preset

3. ทำการตั้งชื่อ brush จากนั้นกด OK

4. brush ที่สร้างขึ้นเองจะถูกเพิ่มเข้าไป
ซึ่งจะดูได้จากรูปแบบของ brush เวลาที่กดใช้ (ส่วนที่เพิ่มใหม่จะอยู่ล่างสุด)

หรือสามารถดูได้จาก brush preset จากเมนู Window > Brush Preset (ส่วนที่เพิ่มใหม่จะอยู่ล่างสุด เช่นกัน)

 

หลังจากสร้างแล้ว เมื่อทดลองใช้ ก็จะได้ brush ในลวดลายตามที่ผู้ใช้ต้องการ

CSS : การเน้น text input เวลาทำการกรอกข้อมูล

ปกติเมื่อมีการใช้งาน text input หากไม่มีการตกแต่งใดๆ ในขณะที่ทำการที่กรอกข้อมูลลงไป textbox input ก็จะมีรูปลักษณ์ไม่ต่างไปจากตอนที่ไม่ได้กรอกข้อมูล แต่ถ้าหากต้องการเพิ่มลูกเล่นให้ text input มีการเน้นจุดที่ทำการกรอกข้อมูล ก็สามารถทำได้โดยกำหนดค่า input ภายใต้ <style>…</style> แล้วใช้โค้ดนี้

input[type=ประเภทtextbox]:focus {
ลักษณะ text input ที่ต้องการ เช่น สี สีขอบ ความหนาของขอบ ฯลฯ;
}

 

ตัวอย่างการใช้งาน (สมมติกำหนดให้ input 2 ประเภทแสดงผลต่างกัน)

 

จะได้ผลลัพธ์ดังนี้

– เมื่อทำการกรอกส่วนที่เป็นประเภท text
ส่วนที่ทำการกรอกข้อมูลจะขึ้นขอบสีดำหนารอบตัว text input ตามที่ตั้งค่าไว้ว่า border: 3px solid #555

– เมื่อทำการกรอกส่วนที่เป็นประเภท password
ส่วนที่ทำการกรอกข้อมูลจะมีพื้นหลังสีเหลืองอ่อนภายใน text input ตามที่ตั้งค่าไว้ว่า background-color: lightyellow

จะเห็นได้ว่า สิ่งที่ทำให้ text input ทั้งสองประเภทแสดงผลลัพธ์ต่างกัน อยู่ที่คำสั่งภาย :focus ของ input แต่ละชนิดนั่นเอง
ซึ่งการกำหนด input[type=???]:focus ก็ต้องสอดคล้องกับ type=”???”  ที่เซตบนตัว input ด้วย