【发布时间】:2018-11-09 08:10:34
【问题描述】:
我在整个网络上进行了搜索,但找不到针对我的问题的解决方案/指南。
我正在使用下面的脚本,它是一个较大脚本的一部分,将多个 SQL 表导出到 CSV。它使用 SQL 表中的数据填充数据集。
我遇到的问题主要与日期时间设置有关。例如,如果我要使用导出向导将 SQL 表导出到 CSV 文件中。日期的显示与 SQL 中的完全相同,例如“2014-05-23 07:00:00.0000000”或“2014-05-23”。
但是,当我使用我的脚本时,它会将日期时间的格式更改为“23/05/2014 07:00:00”或“23/05/2014 00:00:00”。我相信这与我的机器/powershell 会话的文化设置有关。
cls
# Declare variables for connection and table to export
$Server = 'server'
$Database = 'database'
$Folder = 'D:\Powershell Scripts\01_Export From SQL\Test Folder'
$Tablename1 = 'test'
$Tablename2 = ''
# Delcare Connection Variables
$SQLconnection = New-Object System.Data.SqlClient.SqlConnection
$SQLconnection.ConnectionString = "Integrated Security=SSPI;server=$Server;Database=$Database"
# Delcare SQL command variables
$SQLcommand = New-Object System.Data.SqlClient.SqlCommand
$SQLcommand.CommandText = "SELECT [name] from sys.tables where [name] like '%$Tablename1%' and [name] like '%$Tablename2%' order by [name]"
$SQLcommand.Connection = $SQLconnection
# Load up the Tables in a dataset
$SQLAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SQLAdapter.SelectCommand = $SQLcommand
$DataSet = New-Object System.Data.DataSet
$null = $SqlAdapter.Fill($DataSet)
$SQLconnection.Close()
"Time to Export`tRecords `tFile Name"
"--------------`t------- `t---------"
foreach ($Table in $DataSet.Tables[0])
{
$stopwatch = [system.diagnostics.stopwatch]::StartNew()
$FileExtractUTF8 = "$Folder\FromPSUTF8_$($Table[0]).csv"
$SQLcommand.CommandText = "SELECT * FROM [$($Table[0])]"
$SQLAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SQLAdapter.SelectCommand = $SQLcommand
$DataSet = New-Object System.Data.DataSet
$Count = $SQLAdapter.Fill($DataSet)
$SQLconnection.Close()
$DataSet.Tables[0] | Export-Csv $FileExtractUTF8 -NoTypeInformation -Encoding UTF8
$stopwatch.stop()
$Time = "{0}" -f $stopwatch.Elapsed.ToString('mm\:ss\.fff')
“{0,-14}`t{1,-10}`t{2}” -f $Time,$Count,$Table.name
}
主要目标是将数据从 SQL 导出到一个平面文件中,数据的显示方式与我使用导出向导时完全一样。
【问题讨论】:
-
它必须是你的 powershell 脚本,需要看到它。
-
请查看更新后的帖子。
-
Export-Csv Cmdlet 只是转储文件。您必须以您需要的格式输出每个字段。
-
或者不只是选择 *,而是使用 SQL 将日期格式化为 convert(varchar(30),YourDateField,120) 为 NewDateFormatted
-
我已经尝试过了,但它仍然会产生问题。例如,列数据类型 Datetime 在 sql 中显示为“2000-01-01 00:00:00.000”,将该字段转换为 varchar(255) 会将格式更改为“Jan 1 2000 12:00AM”。这是在 SQL 中完成的,甚至在它接触到 powershell 之前。我没有应用任何样式,因为我的目标是保持表格中的原始格式。
标签: sql-server powershell datetime