本文中以SQL Server查询语句为例
- 第一步:在微软的SSMS中写要查询的语句
select '質問日時','質問ID','相談カテゴリ名','質問タイトル','質問本文','回答日時','回答ID','回答者','回答内容'
union all
select top 100
cast(q.InsertDt as nvarchar(30)),cast(q.QuestionId as nvarchar(20)),mc.category_name,c.Title,q.QuestionBody,
cast(a.AnswerDt as nvarchar(30)),cast(a.AnswerId as nvarchar(30)),ma.answerer_nickname,a.AnswerBody
from Questions as q
join Answers as a
on q.QuestionId=a.QuestionId
join Counselings as c
on q.CounselingId=c.CounselingId
join m_category as mc
on c.CategoryId=mc.category_id
join m_answerer as ma
on AnswererId=ma.answerer_id
where
c.QaOpenFlg=1
and CONVERT(varchar(10),q.InsertDt,120) <CONVERT(varchar(10),GETDATE(),120)
-
查询语句说明:
1、第一个select是设置想要显示的字段名,注意个数要和第二个select中实际选择的字段个数相同
2、union all一定要有
3、第二个select中选择的字段如果类型不是char类型的,必须强制转换为char类型,否则你试试 -
第二步:将有效的sql语句放入shell脚本中
(这段脚本我也不太懂,用的是别人给的模板)
#使用当前的时间来创建文件夹
$usedate = "{0:yyyyMMddHHmmss}" -f (get-date)
md F:\tmp\$usedate
md F:\tmp\$usedate\converted
function Convert {
param(
[String]$in = "F:\tmp\$usedate",
[String]$out = "F:\tmp\$usedate\converted",
[String]$from = "Unicode",
[String]$to = "UTF-8"
)
# 引数$from、$toから、文字コードを表すEncodingオブジェクトを生成
$enc_f = [Text.Encoding]::GetEncoding($from)
$enc_t = [Text.Encoding]::GetEncoding($to)
# 与えられたパス(c:\tmp\convert)から合致するファイルリストを再帰的に取得
Get-ChildItem $in -recurse |
# 取得したファイルを順番に処理
ForEach-Object {
# 取得したオブジェクトがファイルの場合のみ処理(フォルダの場合はスキップ)
if($_.GetType().Name -eq "FileInfo") {
# 変換元ファイルをStreamReaderオブジェクトで読み込み
$reader = New-Object IO.StreamReader($_.FullName, $enc_f)
# 保存先のパス、保存先の親フォルダのパスを生成
$o_path = $_.FullName.ToLower().Replace($in.ToLower(), $out)
$o_folder = Split-Path $o_path -parent
# 保存先のフォルダが存在しない場合にフォルダを自動生成
if(!(Test-Path $o_folder)) {
[Void][IO.Directory]::CreateDirectory($o_folder)
}
# 保存先ファイルをStreamWriterオブジェクトでオープン
$writer = New-Object IO.StreamWriter($o_path, $false, $enc_t)
# 変換元ファイルを順に読み込み、保存先ファイルに書き込み
while(!$reader.EndOfStream){$writer.WriteLine($reader.ReadLine())}
# ファイルをすべてクローズ
$reader.Close()
$writer.Close()
}
}
}
bcp "select '質問日時','質問ID','相談カテゴリ名','質問タイトル','質問本文','回答日時','回答ID','回答者','回答内容'
union all
select top 1000
cast(q.InsertDt as nvarchar(30)),cast(q.QuestionId as nvarchar(20)),mc.category_name,c.Title,q.QuestionBody,
cast(a.AnswerDt as nvarchar(30)),cast(a.AnswerId as nvarchar(30)),ma.answerer_nickname,a.AnswerBody
from Questions as q
join Answers as a
on q.QuestionId=a.QuestionId
join Counselings as c
on q.CounselingId=c.CounselingId
join m_category as mc
on c.CategoryId=mc.category_id
join m_answerer as ma
on AnswererId=ma.answerer_id
where
c.QaOpenFlg=1
and CONVERT(varchar(10),q.InsertDt,120) <CONVERT(varchar(10),GETDATE(),120)" queryout "F:\tmp\$usedate\VQuestions_unicode.csv" -w -t "\t" -S jejebcqbng.database.windows.net -d devkaramedy -U karamedy -P Hyron2012
Convert "F:\tmp\$usedate\VQuestions_unicode.csv" "F:\tmp\$usedate\converted\VQuestions_utf8.csv"
gc "F:\tmp\$usedate\converted\VQuestions_utf8.csv" -ReadCount 100 | %{
$_ -replace "^","""" -replace "$","""" -replace "`t",""",""" -replace ",""""","," | Out-File -FilePath "F:\tmp\$usedate\converted\VQuestions.csv" -Encoding utf8 -Append
}
gci * -Include VQuestions* | %{del $_}
del F:\tmp\$usedate\converted
- 说明:
该脚本是获取当前的时间来自动生成文件夹的