วันพุธที่ 9 กันยายน พ.ศ. 2558

รวมคำสั่งใช้งาน MySQL

รวมคำสั่ง MYSQL ที่ใช้งานบ่อยๆ


แทนที่ข้อความในฟิลด์  

แทนที่ข้อความ 3101 ด้วย 2558 ในฟิลด์ date_permit 
UPDATE business SET date_permit = REPLACE(date_permit, "3101", "2558");


insert ignore สำหรับ insert ข้อมูลลงตาราง โดยไม่สนใจว่าข้อมูลจะซ้ำหรือไม่

insert ignore into user
select  rtrim(`cmb`.`name`) AS `fname`,rtrim(`cmb`.`lname`) AS `lname` from `cmb` ;


คำสั่ง update 

update step2 k inner join (select tmpid from step2 a
inner join fnamelname b on rtrim(a.fname)=b.fname and rtrim(a.lname)=b.lname
where flag is null order by tmpid*1 asc) j on   k.tmpid=j.tmpid
set k.flag='Y';


update pnd k inner join (select num from pnd where length(cwd_code)<8) j on k.num=j.num
set  k.cwd_code=CONCAT("0",k.cwd_code)



update pnd k
inner join
(select num from pnd where cast(num as UNSIGNED)>=3044) j on k.num=j.num
 set k.date_import='01122558'


update pnd k
inner join
(select provincename,officecode from office ) j on j.officecode=k.code
 set k.province=j.provincename
where cast(k.num as UNSIGNED)>=3044


คำสั่ง concat

select tin,pin,CONCAT(substring(date,5,4),substring(date,3,2),substring(date,1,2)) as linedate
from formsl4
where CONCAT(substring(date,5,4),substring(date,3,2),substring(date,1,2))    > 25570910

update pnd set pin=CONCAT('0',pin) where length(triM(pin))=12 and cast(num as UNSIGNED)>=3044 

คำสั่งเรียงข้อมูลตัวอักษร โดยแปลงค่าเป็นตัวเลขก่อน
select * from pnd_tmp order by cast(num as UNSIGNED ) desc



linux คำสั่งที่ใช้งาน

คำสั่ง linux ที่ใช้งานบ่อย


แสดงรายชื่อไฟล์ในไดเรคทอรี่ปัจจุบัน

ls -al

แสดงรายชื่อไฟล์ทั้งหมดในไดเรคทอรี่ย่อยภายใน

find .


คำสั่งบีบอัดข้อมูล


tar -zcvf  /home/somchai/25571027cgibindata.tar.gz  ./cgi-bin



แก้ไข firewall (iptable)

[root@web ~]# vi /etc/sysconfig/iptables


ตัวอย่าง iptable

-A RH-Firewall-1-INPUT -s 10.2.43.0/255.255.255.0 -p tcp -m state --state NEW -m multiport --dports 22,21,5901,3306,137,138,139 -j ACCEPT

เมื่อแก้ไขเสร็จแล้วให้ restart iptable

[root@webboard ~]# service iptables restart


เปลี่ยนสิทธิเจ้าของไดเรคทอรี่

chown pop:popgroup ./pop


เปลี่ยนสิทธิโดยใช้ -R 

-R จะเปลี่ยนสิทธิทุกไดเรคทอรี่ย่อยภายในทั้งหมดด้วย
/web/htdocs/webservice
 chown -R jk231541:jk231541 webservice

สร้างไดเรคทอรี่

mkdir data



เปลี่ยนโหมดไฟล์

chmod 775 board
 chmod 775 *



ดูคำสั่งย้อนหลังทั้งหมด

 history



ภาษา Perl

รวมคำสั่ง Perl ที่ใช้งาน



$name =~ s/ //g;
ลบช่องว่างในตัวแปล $name 
/g หมายถึงการแทนค่าทุกตัวที่พบ ถ้าไม่ใส่จะแทนเฉพาะตัวแรก


เฉดสีตัวอักษร คำที่ค้นพบ ในตัวแปร $branam ใช้แบบนี้
$branam_full =~ s/$branam/<font color=green>$branam<\/font>/; 


กำหนดค่าบน db2 เพื่อให้รัน query ได้มีประสิทธิภาพมากขึ้น
$stmtsetoptimizer = " set current query optimization 4  ";


substr($officeid_branch,0,5)


DB2 คำสั่งต่างๆ


คำสั่งต่างๆบนฐานข้อมูล DB2


คำสั่งการ export ข้อมูล


export to d:\business.txt of del

select * from cmb.business fetch first 10 rows only;

(ใช้ comma เป็นตัวคั่นระหว่างฟิลด์ และดึงเฉพาะ 10 รายการแรกที่เจอ)



export to d:\employee.del of del  MODIFIED BY COLDEL|
select title,fname,lname
from employee.user  where office ='99100000';

( ใช้ pipe |  เป็นตัวคั่นระหว่างฟิลด์)

คำสั่งลบตาราง

drop table cmb.user;


คำสั่งสร้างตาราง


CREATE TABLE  cmb.user (
        "ID"                VARCHAR(9) NOT NULL PRIMARY KEY,
        "NAME"               CHAR(150),
        "POSITION"         VARCHAR(150),
        "OFFICENAME"         VARCHAR(100),
        "OFFICEID"       CHAR(8),
        "ADDDATE"            DATE
) IN "DATA1" INDEX IN  "INDEX1" ;


คำสั่ง drop primarykey


ALTER TABLE cmb.user DROP PRIMARY KEY;

คำสั่งให้สิทธิ

ให้สิทธิ select,insert,update,delete บนตาราง cmd.user  กับ user bbc01
GRANT  select,insert ,update,delete ON TABLE cmd.user TO USER bbc01;




คำสั่งเพิ่มฟิลด์เข้าตาราง


ALTER TABLE TESTDSS.EST_RD ADD COLUMN YEAR_BUD CHARACTER (4) ;



คำสั่งสร้าง index

CREATE INDEX  I01_cmb_logfile ON  cmb.LOGFILE (id);

คำสั่งสร้าง index แบบ function


ตัวอย่าง ต้องการสร้าง index โดยให้ฟิลด์เป็น upper() ก่อน
แทนที่จะสร้างฟิลด์ใหม่ เราสามารถสร้าง function upper ให้เป็นตัว index ได้เลย
เริ่มมีใน db2 เวอร์ชั่น 10.5 ครับ
db2 create index  inx1 on emp.user(upper(v_name)) allow reverse scan;


คำสั่งเกี่ยวกับวันที่


select year(current date-1 years - 6 months),month(current date-1 years - 1 months) from emp.user first 1 rows only



แปลงตัวอักษรเป็นตัวเล็ก

lcase(cname)




ใช้เงื่อนไขในคำสั่ง

select fname,lname,case sex  when 'M' then 'ชาย' ELSE 'หญิง'  END as sexdesc  from emp.user;

คำสั่งอื่นๆ

select substr(id,1,1),count(*) from user.employee group by   substr(id,1,1) with ur;

ดูรายชื่อ schema

list tables for schema off




import ข้อมูลเข้าตาราง


import from "C:\source\รายชื่อบริษัท.txt" of del
 MESSAGES "d:\import.log" insert into cmb.business;



import from d:\food.txt of del
insert into cmb.food (name,price);

import พร้อมสร้างตารางให้ด้วย ตาม pc/ixf
import from "d:\import\abc.office.ixf" of ixf
 insert into abc.office;

import แบบเลือกระบุฟิลด์ 
import from "D:\DOCPOP\\mainMeter.csv" of del MODIFIED BY COLDEL|
METHOD P ( 1,8,9) MESSAGES "d:\df"

insert into  cti.tmpdata  (tmpid,pin,name);


import แบบใช้ tab delimited
import from "D:\user_outside.txt" OF DEL MODIFIED BY COLDEL0X09
insert into test.user_outside (id,authority);




ดูโครงสร้างตาราง และคำสั่ง create โดยละเอียด


db2look -d db_name -e -l -o db_name.dll -u userid -w password


คำสั่ง union VS union all

คำสั่ง union รวมรายการ ถ้ารายการซ้ำกัน
คำสั่ง union all  ไม่รวมรายการ ถ้ารายการซ้ำกัน


ใส่ลำดับที่ กำกับ ทุกรายการ โดยเรียงลำดับจากฟิลด์ fname และตัดมาตั้งแต่ลำดับที่ 1-500

select * from
( select col.*,row_number() over (order by col.fname asc) as rn from 
( select 'คนไทย' AS human,title,fname,lname from cmb.emp1
union all 
 select 'คนจีน' AS human,title,fname,lname from cmb.emp2 
) as col 
) as allrows
where rn between 1 and 500 with ur


with ur ต่อท้ายคำสั่ง

คำสั่ง with ur จะใช้เพื่อให้สามารถ เข้าไป query ข้อมูลในตารางที่กำลังมีการปรับปรุงข้อมูลอยู่ เช่น update delete ได้โดยไม่ต้องรอให้ให้การทำงานปรับปรุงข้อมูลในตารางนั้นเสร็จก่อน


คำสั่ง update

update  user a
set uid=(select uid from  cmb.name b where a.id=b.id)
where mon='06' and year='2558' and office='10058' and (uid is null or length(rtrim(uid))<11) with ur;


แก้ปัญหากรณีข้อมูลในฟิลด์ มีการตัดบรรทัด ทำให้ข้อมูลใช้ไม่ได้
ให้ใช้คำสั่งนี้ในการดึงข้อมูลออกมา

select field1,field2,REPLACE(REPLACE(name, CHR(10), ' '), CHR(13), ' ')  from xxx.ooo2014
where year=2014 and mon=1
 order by tmpid asc with ur;


แทนค่า null ในฟิลด์ ให้เป็นเลข 0

coalesce(a.TOT,0)


ใช้ pipe ต่อข้อความ

SELECT   a.title||' '||a.name as name FROM  cmb.user a

ผู้ดูแล


- kill เตะ user  ออก
db2 list application |grep ตามด้วยชื่อ user |awk '{print $3}' |xargs -i db2 force application 'ตามด้วยชื่อ user'




ข้อควรระวัง


- คำสั่ง in ทำงานเร็วกว่า not in มาก เท่าที่ทดลองระยะเวลาต่างกันประมาณ 4 เท่า  ให้พยายามใช้คำสั่ง in แทน not in








Microsoft Excel แก้ปัญหาข้อมูลในเซล เป็นเครื่องหมายชาร์ป #



ปัญหาข้อมูลในเซลไม่ยอมแสดงเป็นตัวอักษร แต่กลับแสดงเป็นเครื่องหมายชาร์ป # แทน

ปัญหาเกิดจากในเซลเป็นรูปแบบ Text มีตัวอักษรมากเกินกว่าที่รับได้



วิธีแก้ไข


1.ให้ลบตัวอักษรให้เหลือน้อยกว่า 255 ตัวอักษร


2.ปรับแก้ไขรูปแบบเซล ให้เป็นแบบ General แทนรูปแบบ Text ครับ
- เลือกเซลที่ต้องการ
- เลือก Formal Cells
- เลือก Category เป็นรูปแบบ General แทนรูปแบบ Text




วิธีการแก้ไขรูปแบบวีดีโอ



ข้อมูลในเซลเป็นเครื่องหมายชาร์ป # ไม่ยอมเป็นตัวอักษร




เลือก Format Cells

เลือก General แทน Text

ข้อมูลในเซล กลายเป็นตัวอักษรแล้วครับ