Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SSMS-MS SQL服务器查询选项是否设置为打开/关闭以短日期格式显示所有列?_Sql_Sql Server_Date_Tsql_Format - Fatal编程技术网

SSMS-MS SQL服务器查询选项是否设置为打开/关闭以短日期格式显示所有列?

SSMS-MS SQL服务器查询选项是否设置为打开/关闭以短日期格式显示所有列?,sql,sql-server,date,tsql,format,Sql,Sql Server,Date,Tsql,Format,在SSMS中,对于MS SQL Server 2008或更新版本,是否有一个通用查询选项或类似的选项,在启动查询之前可以打开或关闭这些选项,以便将所有日期列查看为短日期(只有日期,没有时间)? 像SET ANSI|u NULLS{ON | OFF}这样的东西 因为我经常使用'select*from table',或类似的不同方法,表内有许多列,日期列位于不同的位置,我不想每次都检查这些列的位置,并且只显式地对它们使用转换或转换,以正确显示它们 谢谢您的建议。我认为SSMS中没有这样的选项。我想到

在SSMS中,对于
MS SQL Server 2008
或更新版本,是否有一个通用查询选项或类似的选项,在启动查询之前可以打开或关闭这些选项,以便将所有
日期列查看为
短日期
(只有日期,没有时间)? 像SET ANSI|u NULLS{ON | OFF}
这样的东西

因为我经常使用
'select*from table'
,或类似的不同方法,表内有许多列,
日期列位于不同的位置,我不想每次都检查这些
列的位置,并且只显式地对它们使用
转换
转换
,以正确显示它们


谢谢您的建议。

我认为SSMS中没有这样的选项。我想到的最好的方法是创建表的视图,这样您就可以进行

select convert(date, <date column>)
选择转换(日期)

一次,它们将在视图中显示为日期。

是的,我将仅从界面端解决这种情况

还说,

因为我经常使用“从表中选择”或不同的方法

这本身就不好,你不能有自己的方式或方法

尽管如此,在sql中,我们可以这样做

USE AdventureWorks2012
    GO

    --proc parameter
    DECLARE @tablename VARCHAR(50) = 'Employee'
    DECLARE @table_schema VARCHAR(50) = 'HumanResources'
    --local variable
    DECLARE @Columnname VARCHAR(max) = ''
    DECLARE @Sql VARCHAR(max) = ''

    SELECT @Columnname = @Columnname + CASE 
            WHEN DATA_TYPE = 'date'
                OR DATA_TYPE = 'datetime'
                THEN 'cast(' + QUOTENAME(COLUMN_NAME) + ' as date)'
            ELSE QUOTENAME(COLUMN_NAME)
            END + ',' + CASE 
            WHEN DATA_TYPE = 'date'
                OR DATA_TYPE = 'datetime'
                THEN 'cast(' + QUOTENAME(COLUMN_NAME) + ' as date)'
            ELSE QUOTENAME(COLUMN_NAME)
            END + ','
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE TABLE_NAME = @tablename
        AND TABLE_SCHEMA = @table_schema
    ORDER BY ORDINAL_POSITION

    SET @Columnname = STUFF(@Columnname, len(@Columnname), 1, '')
    --set @Columnname=stuff(@Columnname,1,1,'')
    --PRINT @Columnname
    SET @Sql = 'select ' + @Columnname + ' from ' + @table_schema + '.' + @tablename + ''

    --PRINT @Sql
    EXEC (@Sql)
它可以根据需要进一步改进。也请使用
sp\u executeSql
您可以自定义案例条件。

SSMS no中没有“魔术”显示格式按钮或功能。当您执行查询时,SSMS将以适合该数据类型的格式显示该列;对于包含时间的
datetime
字段

如果不想包含时间,则必须
CAST
CONVERT
单个列,或在表示层中适当设置数据格式(例如,如果使用Excel,则dd/MM/yyyy可能是合适的)

如果所有列的值末尾都有
'00:00:00.000'
,问题不在于显示格式,而在于数据类型的选择。显然,问题不在于SSMS为
date**time**
列返回时间,而在于您将一列声明为
datetime
,而该列本应为
date
。您可以使用
ALTER
更改列的数据类型。例如:

USE Sandbox;
Go

CREATE TABLE TestTable (ID smallint IDENTITY(1,1), DateColumn datetime);

INSERT INTO TestTable (DateColumn)
VALUES ('20180201'),('20180202'),('20180203'),('20180204'),('20180205');

SELECT *
FROM TestTable;
GO

ALTER TABLE TestTable ALTER COLUMN DateColumn date;
GO

SELECT *
FROM TestTable;
GO

DROP TABLE TestTable;
TL;DR:SSMS以适合您所拥有数据的格式显示数据。如果您不喜欢它,您必须为它提供一种替代格式,以便为每个适当的列显示它。如果问题是您的数据,请更改数据类型


编辑:我想在这里多加一点

这个问题非常类似于问“我希望能够运行查询,其中小数只返回值的整数部分。这可以自动完成吗?”。因此,值9.1将返回9,但值9.9999999也将返回9

现在,我意识到你“可能”在想“数字和日期不一样”,但事实上,它们确实是。在末尾(尤其是在数据中),日期只是一个数字(地狱,SQL Server中的
datetime
时间存储为
1900-01-01
之后的天数,时间是该数字的小数,因此
43136.75
实际上是
2018-02-07 18:00:00.000

现在我们讨论的是数字,将所有小数返回为其
下限值对您来说是不是一个好主意?我想答案是“不”。想象一下,如果你在做某种会计工作,只使用
下限
值对交易的价值求和。您可能会损失1000英镑(或更多)

想想老例子,有人从价值不到一便士的付款中偷钱。他们盗窃的数额是巨大的,但是,没有一件盗窃案的价值大于等于0.01美元。同样的原则在这里也适用;精确性是非常重要的,如果你的专栏有这样的精确性,它应该是有原因的


日期也是如此。如果使用日期存储时间,并且时间与特定查询无关,请更改查询;老实说,设置忽略时间(或小数点)是个坏主意。

这不是数据库问题,而是接口问题。你用什么工具访问数据库?你说得对。DrHouseofSQL已经正确地假设了:SSMS可能有一个注册表项,它提供SSMS使用的日期和时间格式,但是一些摆弄并没有让我觉得它跳出来了。如果它遵循系统语言环境设置,那么您可能可以将时间格式的注册表项更改为空字符串。我在我的帖子中添加了一些内容,因为我觉得这是相关的。意味着指定它们(列)。我不想那样做,就像我说的…明白,你只需要做一次,然后视图就被创建了。如果您可以验证在SSM设置中没有执行所需操作的选项,那么这可能是您唯一的选择…我会对各种表/数据库进行简短而快速的查询。在这样的环境中,当您经常更改询问对象时,在SSMS中将其更改为一个选项非常有用,以避免显示如此大的日期列,特别是如果您通常对时间值不感兴趣(并且在日期列的时间部分只有'00:00:00.000')。就我个人而言,我想把
'['+COLUMN\u NAME+']'
改为
QUOTENAME(COLUMN\u NAME)
。只包括所有可能的名字。这接近我想要的。但是很接近。这完全是SSMS中的一个选项。在其他DB IDE中,这些选项是否可用?(Oracle、MySQL等)?如果投票人能评论他们为什么这么做,我将不胜感激。