mysql表數據導出

sql 示例,這是一個查詢訂單導出到/tmp/order.csv文件的sql語句

select * into outfile '/tmp/order.csv' fields terminated by ',' lines terminated by '\n' from(
select '訂單號', '用戶', '總計', '小計','運費','優惠','使用積分','商家實收','收件人','類型','運單號','狀態','創建日期','收件人地址','商品' ,'規格' ,'數量','單價','商品小計'  union 
select 
concat('\t',convert(db_orders.code using gbk)) as '訂單號', 
convert(db_user.name using gbk) as '用戶' ,
convert(db_orders.grand_total using gbk)as '總計' , 
convert(db_orders.subtotal using gbk) as '小計' ,
convert(db_orders.freight_price using gbk) as '運費' , 
convert(db_orders.shop_coupon_saving using gbk) as '優惠' ,
convert(db_orders.integral using gbk) as '使用積分',
convert(db_orders.shop_grand_total using gbk) as '商家實收',
convert(CONCAT_WS('|',db_orders.take_name ,db_orders.take_telephone) using gbk) as '收件人' ,  
convert(case  db_orders.peisong   
	when  1 then '物流配送'  
	when 2 then '同城自提'  
	end  using gbk) as '類型',
convert(db_orders.tracking_code using gbk) as '運單號',   
if(db_orders.closed=1,convert('已關閉' using gbk),convert(case  db_orders.status  
	when 0 then '待付款' 
	when 1 then '待發貨' 
	when 2 then '已發貨' 
	when 3 then '已完成'
	when 8 then '已收貨' 
	end using gbk) ) as '狀態',
convert(db_orders.create_date using gbk) as '創建日期',
convert(CONCAT_WS('|',CONCAT_WS('|',db_orders.take_area_msg,  REPLACE(db_orders.take_address,CHAR(10),'')) ,db_orders.take_post_code) using gbk) as '收件人地址' ,
convert(db_goods.title using gbk) as '商品', convert(db_goods_format.title using gbk) as '規格' ,
convert(db_orders_item.item_number using gbk) as '數量',
convert( db_orders_item.item_price  using gbk )as '單價',
convert( db_orders_item.item_subtotal using gbk)as '商品小計' 
from
db_orders join db_orders_item on db_orders.id= db_orders_item.orders_id 
join  db_goods on db_orders_item.goods_id = db_goods.id  
join  db_goods_format on db_orders_item.format_id = db_goods_format.id 
join db_user on db_orders.user_id =db_user.id 
where  db_orders.display =1 and db_orders.user_display =1) b;

將查詢的結果導出到/tmp/order.csv 文件中,字段以','結尾,行以'\n'換行結尾。

select * into outfile '/tmp/order.csv' fields terminated by ',' lines terminated by '\n' from

獲取到列名,select 所有列名 union上真實的查詢結果

select '訂單號', '用戶', '總計', '小計','運費','優惠','使用積分','商家實收','收件人','類型','運單號','狀態','創建日期','收件人地址','商品' ,'規格' ,'數量','單價','商品小計'  union 

查看需要導出的表編碼格式

show create table  ***

CONVERT()函數可以用來獲取一個類型的值,併產生另一個類型的值,數據庫中是使用的utf8,sql 中使用gbk來重新獲取對應的值。

convert(db_user.name using gbk) as '用戶' 

查詢結果字段拼接,將take_name和take_telephone兩個字段使用 '|'拼接起來

CONCAT_WS('|',db_orders.take_name ,db_orders.take_telephone)

case 判斷 ,根據字段對應的不同值,展示不同的信息。

case  db_orders.status  
	when 0 then '待付款' 
	when 1 then '待發貨' 
	when 2 then '已發貨' 
	when 3 then '已完成'
	when 8 then '已收貨' 
end

if判斷,當closed是1的時候,狀態顯示 已關閉,不是1的時候根據status的值顯示狀態信息。

if(db_orders.closed=1,
    convert('已關閉' using gbk),
    convert(
	    case  db_orders.status  
	        when 0 then '待付款' 
	        when 1 then '待發貨' 
	        when 2 then '已發貨' 
	        when 3 then '已完成'
	        when 8 then '已收貨' 
	    end using gbk) 
    ) as '狀態',

替換值中的"\n" 換行符,在take_address 中發現換行符,使用REPLACE函數替換。

REPLACE(db_orders.take_address,CHAR(10),'')) 

其他字符參考  ASCII控制字符

二進制 十進制 十六進制 縮寫 可以顯示的表示法 名稱/意義
0000 0000 0 00 NUL 空字符(Null)
0000 0001 1 01 SOH 標題開始
0000 0010 2 02 STX 本文開始
0000 0011 3 03 ETX 本文結束
0000 0100 4 04 EOT 傳輸結束
0000 0101 5 05 ENQ 請求
0000 0110 6 06 ACK 確認迴應
0000 0111 7 07 BEL 響鈴
0000 1000 8 08 BS 退格
0000 1001 9 09 HT 水平定位符號
0000 1010 10 0A LF 換行鍵
0000 1011 11 0B VT 垂直定位符號
0000 1100 12 0C FF 換頁鍵
0000 1101 13 0D CR 歸位鍵
0000 1110 14 0E SO 取消變換(Shift out)
0000 1111 15 0F SI 啓用變換(Shift in)
0001 0000 16 10 DLE 跳出數據通訊
0001 0001 17 11 DC1 設備控制一(XON 啓用軟件速度控制)
0001 0010 18 12 DC2 設備控制二
0001 0011 19 13 DC3 設備控制三(XOFF 停用軟件速度控制)
0001 0100 20 14 DC4 設備控制四
0001 0101 21 15 NAK 確認失敗迴應
0001 0110 22 16 SYN 同步用暫停
0001 0111 23 17 ETB 區塊傳輸結束
0001 1000 24 18 CAN 取消
0001 1001 25 19 EM 連接介質中斷
0001 1010 26 1A SUB 替換
0001 1011 27 1B ESC 跳出
0001 1100 28 1C FS 文件分割符
0001 1101 29 1D GS 組羣分隔符
0001 1110 30 1E RS 記錄分隔符
0001 1111 31 1F US 單元分隔符
0111 1111 127 7F DEL 刪除

查詢結果存入csv文件 如下圖

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章