【问题标题】:unable to insert date in changed format SQL无法以更改的格式 SQL 插入日期
【发布时间】:2019-03-11 19:19:02
【问题描述】:

我有以下代码用于在 SSRS 中生成报告。

create table #tempdata(computer_name varchar(max),[Machine Type] varchar(max),Service_tag varchar(max),
[Operating System] varchar(max),
Computer_Model varchar(max), [Technical YES/NO] varchar(10),Manufacturer varchar(max),[SSD or HDD or null] varchar(max),
HDD_Size int,AD_site varchar(max),AD_Zone varchar(max), firstpowerondate date,FBODY varchar(max),manufacturer_date date,capacity int,
BIOS_version varchar(max),biosreleasedate date, BIOSY int,snapshotdate date)

--select * from SCCM_PCrefreshdata
insert into #tempdata
SELECT DISTINCT
v_R_System.Netbios_Name0 AS Computer_Name,
case
when v_GS_COMPUTER_SYSTEM.Model0 like '%Virtual%' then 'Virtual Machine'
when v_GS_COMPUTER_SYSTEM.Model0 like '%VM%' then 'Virtual Machine'
else 'Physical Machine'
End as 'Machine Type',
Tag0 as Service_Tag,
CASE
When Operating_System_Name_and0 like '%6.1%' then 'Windows 7'
When Operating_System_Name_and0 like '%6.3%' then 'Windows 8.1'
When Operating_System_Name_and0 like '%10%' then 'Windows 10'
END as 'Operating System',
v_GS_COMPUTER_SYSTEM.Model0 AS Computer_Model,
case
when v_GS_COMPUTER_SYSTEM.Model0 like '%precision%' and v_GS_COMPUTER_SYSTEM.manufacturer0 like '%dell%' then 'YES'
else 'NO' END as 'Technical YES/NO',
v_GS_COMPUTER_SYSTEM.manufacturer0 AS Manufacturer,
CASE
when v_GS_DISK.PNPDeviceID0 like '%SSD%' then 'SSD'
                when v_GS_DISK.Model0 like '%SanDisk%' then 'SSD'
                when v_GS_DISK.Model0 like '%hynix%' then 'SSD'
                when v_GS_DISK.Model0 like '%LITEON%' then 'SSD'
                when v_GS_DISK.Model0 like '%KINGSTON%' then 'SSD'
                when v_GS_DISK.Model0 like '%MICRON%' then 'SSD'
                when v_GS_DISK.Model0 like '%NVMe%Device%' then 'SSD'
                when v_GS_DISK.Model0 like '%Crucial%' then 'SSD'
                when v_GS_DISK.Model0 like '%TOSHIBA KSG60ZM%' then 'SSD'
                when v_GS_DISK.Model0 like '%TOSHIBA THNSNK%' then 'SSD'
                when v_GS_DISK.PNPDeviceID0 is null then 'null'
                else 'HDD' END as 'SSD or HDD or null',
HDISK.size0 AS HDD_Size,
[AD_Site],
[AD_Zone],
CHASSIS.FirstPowerOnDate0 as First_Power_On_Date,
CASE
When FirstPowerOnDate0 is null then '1900'
When FirstPowerOnDate0 like '%2011%' then '2011'
When FirstPowerOnDate0 like '%2012%' then '2012'
When FirstPowerOnDate0 like '%2013%' then '2013'
When FirstPowerOnDate0 like '%2014%' then '2014'
When FirstPowerOnDate0 like '%2015%' then '2015'
When FirstPowerOnDate0 like '%2016%' then '2016'
When FirstPowerOnDate0 like '%2017%' then '2017'
When FirstPowerOnDate0 like '%2018%' then '2018'
When FirstPowerOnDate0 like '%2019%' then '2019'
End as 'FPODY',
CHASSIS.ManufactureDate0 as Manufacturer_Date,
MEMORY.Capacity,
SMBIOSBIOSVersion0 As BIOS_VERSION,
ReleaseDate0 AS BIOS_RELEASE_DATE,
CASE
When ReleaseDate0 is null then '1900'
When ReleaseDate0 like '%2008%' then '2008'
When ReleaseDate0 like '%2009%' then '2009'
When ReleaseDate0 like '%2010%' then '2010'
When ReleaseDate0 like '%2011%' then '2011'
When ReleaseDate0 like '%2012%' then '2012'
When ReleaseDate0 like '%2013%' then '2013'
When ReleaseDate0 like '%2014%' then '2014'
When ReleaseDate0 like '%2015%' then '2015'
When ReleaseDate0 like '%2016%' then '2016'
When ReleaseDate0 like '%2017%' then '2017'
When ReleaseDate0 like '%2018%' then '2018'
When ReleaseDate0 like '%2019%' then '2019'
End as 'BIOSY',NULL
FROM [CM_CAS].[dbo].[v_R_System]
LEFT JOIN (
       SELECT ResourceID, Model0, FirstPowerOnDate0, ManufactureDate0, Tag0 FROM [CM_CAS].[dbo].[v_GS_DELL_DCIM_Chassis0] WHERE [CM_CAS].[dbo].[v_GS_DELL_DCIM_Chassis0].CreationClassName0 = 'DCIM_Chassis'
       ) as CHASSIS ON [CM_CAS].[dbo].[v_R_System].ResourceID = CHASSIS.[ResourceID]
LEFT JOIN [CM_CAS].[dbo].[v_GS_PC_BIOS] ON [CM_CAS].[dbo].[v_GS_PC_BIOS].ResourceID = [CM_CAS].[dbo].[v_R_System].ResourceID
LEFT JOIN (
       SELECT ResourceID, SUM(Capacity0) as Capacity From [CM_CAS].[dbo].[v_GS_PHYSICAL_MEMORY] GROUP BY ResourceID
       ) as MEMORY ON MEMORY.ResourceID = [CM_CAS].[dbo].[v_R_System].ResourceID
LEFT JOIN (
       SELECT ResourceID, size0 FROM [CM_CAS].[dbo].[v_GS_DISK]
        WHERE [v_GS_DISK].Name0 = '\\.\PHYSICALDRIVE0'
       ) as HDISK ON HDISK.ResourceID = [CM_CAS].[dbo].[v_R_System].ResourceID
LEFT JOIN (
       SELECT ResourceID FROM [CM_CAS].[dbo].[v_GS_LOGICAL_DISK] WHERE [v_GS_LOGICAL_DISK].Caption0 = 'c:'
       ) as LDISK ON [CM_CAS].[dbo].[v_R_System].ResourceID = LDISK.ResourceID
JOIN v_GS_DISK ON v_R_System.ResourceID = v_GS_DISK.ResourceID
JOIN totalrpt.AD_Computer ON totalrpt.AD_Computer.AD_name = v_R_System.Netbios_Name0
left JOIN v_GS_COMPUTER_SYSTEM ON v_GS_COMPUTER_SYSTEM.ResourceID = v_R_System.ResourceID
WHERE Operating_System_Name_and0 NOT LIKE '%Server%'
and v_gs_disk.model0 not like '%usb%'
and v_gs_disk.model0 not like '%sdhc%' 
--and MEMORY.Capacity<8192 
--and BIOSY <2017
ORDER BY netbios_name0

create table #temp(computer_name varchar(max),[Machine Type] varchar(max),Service_tag varchar(max),
[Operating System] varchar(max),
Computer_Model varchar(max), [Technical YES/NO] varchar(10),Manufacturer varchar(max),[SSD or HDD or null] varchar(max),
HDD_Size int,AD_site varchar(max),AD_Zone varchar(max), firstpowerondate date,FBODY varchar(max),manufacturer_date date,capacity int,
BIOS_version varchar(max),biosreleasedate date, BIOSY int,snapshotdate date)
insert into #temp 
select * from #tempdata 

 declare @date as date
 set @date=replace(convert(NVARCHAR, getdate(), 111), ' ', '/')
update #temp set snapshotdate=@date


insert into SCCM_PCrefreshdata
select * from #temp 

drop table #temp
drop table #tempdata

我将日期更新为

   declare @date as date
     set @date=replace(convert(NVARCHAR, getdate(), 111), ' ', '/')
    update #temp set snapshotdate=@date

即使在以以下格式更新其提供快照日期之后 2019-03-11,从我得到的 SSRs 报告格式是

所以我需要更改一种格式来获取数据库中的数据,它存储为“-”而不是“/”

【问题讨论】:

  • 友好建议:如果您的问题是您尝试解决的问题的最简单版本,而不是大量额外信息,您会更快地获得更好的答案。
  • 我需要 yyyy-mm-dd 格式的日期,这就是它存储在数据库中的内容。在 SSR 中,我得到 2019/03/06 00:00:0000。即使在使用带有参数的转换后,它也不会改变

标签: sql-server tsql reporting-services


【解决方案1】:

您对影响您的问题的 Sql Server 和 SSRS 中的日期有一些误解。

首先,您已将 snapshotdate 声明为日期:snapshotdate date。这意味着它在 Sql Server 中存储为日期类型列。你说:

我需要 yyyy-mm-dd 格式的日期,这就是它存储在数据库中的内容。

不,yyyy-mm-dd 不是日期在数据库中的存储方式。日期在 Sql Server 中实际上存储为两个整数,一个是日期,另一个是时间。当您提取该数据时,Sql Server Management Studio 会将其显示为以yyyy-mm-dd 格式表示的日期字符串,因为这两个整数对运行查询的人没有任何意义,并且年-月-日优先级绕过了误解用户由于不同的国际日期格式。

其次,您将使用以下转换将当前日期放入您的 @date 字段:

declare @date as date
set @date=replace(convert(NVARCHAR, getdate(), 111), ' ', '/')

让我们忽略转换类型111 没有空格的事实,因此您的replace 函数是多余的,因为该格式已经是yyyy/mm/dd(没有空格)。您的公式从getdate() 获取当前日期,将其转换为格式为yyyy/mm/dd 的字符串,执行冗余的replace 函数,得到与之前完全相同的字符串,以strng 格式表示日期yyyy/mm/dd .然后 - 这是重要的一点 - 因为@date 是日期而不是字符串,Sql Server 将您创建的字符串隐式转换回日期(正如我们所讨论的,它不存储为yyyy/mm/dd 形式的字符串,但有两个整数)。

您无缘无故地进行所有字符串转换。目前您上面的公式与以下公式完全相同:

SET @date = GetDate()

第三,您将日期存储与日期表示混淆了。要将日期放入表中,您需要做的就是将 getdate() 分配给 snapshotdate,而不是在 INSERT 语句中当前处于该位置的 NULL 占位符。不需要更新语句来更新snapshotdate,只需将其与其余数据一起插入,您的表中就会存储正确的当前日期。

第四,演示文稿最好与存储分开,因此日期呈现给您的方式与其存储方式无关。 Sql Server Management Studio 将其显示为yyyy-mm-dd,如果您在此列中更新此字符串,则在数据库中更新该行时,它将隐式转换回日期类型。

SSRS 将默认使用系统定义的短日期格式来显示日期 - 对您而言,这看起来像 MM/dd/yyyy hh:mm:ss tt。现在,如果您想以不同的方式显示它,那么您只需要在表示层(SSRS)中对其进行不同的格式化,而不用关心存储层(Sql Server)。

在表格单元格的属性中,有一个Format 属性用于此目的。分配表格单元格以将Value 属性设置为snapshotdate,并将Format 属性设置为yyyy-MM-dd,日期将以您之后的方式显示。

【讨论】:

  • 这里我不使用表格单元格日期是参数,如果它是在文本框中我会在格式中选择所需的格式 butbits 日期时间参数,并且我在报表生成器中使用默认值可用值将格式更改为yyyy-mm-dd 它不工作
  • 好的,这个问题与你的问题完全无关。我建议您仔细彻底地阅读我的回答,以了解您遇到的其他问题。关于参数显示格式,这是基于您在您的区域和操作系统中的语言设置中的短日期格式,您可以在那里更改它,但我不推荐它,因为它会影响您系统上的所有其他程序,并且仍然不会为查看此报告的其他人解决此问题,因为他们的显示将基于他们的区域和语言设置。
  • 你现在使用的是文本而不是日期时间,这很令人困惑
  • @deepti 不要那样做,坚持使用日期,它们对于您可能想做的其他数据分析会更好,尤其是在绘制图表或导出到 Excel 时。使用 Format 属性在报告中按照您希望的方式设置日期格式,并根据您的区域和语言设置来忍受正在格式化的参数。
【解决方案2】:

您可以使用文本框属性更改 SSRS 中的日期格式,然后选择您想要的日期和格式。它应该可以选择 mm/dd/yyyy,但如果没有,您可以输入。

【讨论】:

  • 这是参数而不是文本框,我得到的只有一个选项是日期时间
  • news i 工具文本并要求用户以 yyy-mm-dd 格式输入日期
猜你喜欢
  • 2021-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 1970-01-01
  • 1970-01-01
  • 2022-07-08
  • 2016-06-08
相关资源
最近更新 更多