29

ShiftDate という SQL Server 2008 テーブルに DATETIME 列があります。これをクエリの DATE 列に変換したい:

SELECT     ID, ScheduleID, ShiftDate, CONVERT(DATE, ShiftDate) AS ProductionDate
FROM       dbo.ScheduleResults

このクエリを SSMS で編集しています。標準のクエリ ウィンドウでクエリを実行すると、エラーは発生しません。ビュー エディター ウィンドウでこれを実行すると、「日付のメソッドを呼び出すことができません」というエラーが表示されます。

CAST メソッドを試しましたが、同じエラーが発生します。

SELECT     ID, ScheduleID, ShiftDate, CAST(ShiftDate AS DATE) AS ProductionDate
FROM       dbo.ScheduleResults

完全なエラー メッセージは次のとおりです。

Executed SQL statement: SELECT ID, ScheduleID, ShiftDate, CAST(ShiftDate as DATE).ToString() AS ProductionDate FROM dbo.ScheduleResults
Error Source: .Net SqlClient Data Provider
Error Message: Cannot call methods on date.

これは SSMS のバグだと思う傾向がありますが、datetime 列を日付に変換する方法について、StackOverflow 関係者からフィードバックを得たいと考えています。簡単に文字列列に変換できますが、Excel では日付として認識されないため、理想的ではありません。

4

11 に答える 11

26

あなたは正しいです、それはSSMSのバグです。SQL Server Management Studio 2008 R2 を使用しています。ビルトイン デザイナーを使用してビューを作成しようとすると、あなたと同じエラー メッセージが表示されます。

SQL Execution Error
Error Source: .Net SqlClient Data Provider
Error Message: Cannot call methods on date.

@Aaron Bertrand が述べたように、問題を解決するには、[新しいクエリ] を選択し、[クエリ] ウィンドウでビューを作成します。あなたのコードでは、次のようになります。

CREATE VIEW myView AS
SELECT     ID, ScheduleID, ShiftDate, CAST(ShiftDate AS DATE) AS ProductionDate
FROM       dbo.ScheduleResults
于 2014-05-08T15:05:44.933 に答える
4

上記のhttps://stackoverflow.com/users/464923/willで述べたように、これは実際のバグのようです 。MS Access の古い時代から継承され、不便な点がすべてあります。エラー メッセージを無視して、ビューを保存してから実行するだけです。通常の SSMS ウィンドウでは、エラーはスローされません。

于 2015-08-18T19:03:00.293 に答える
1

私の経験から、エラーは無視できます。ビューを保存し、デザイン/「ビュー エディター」ウィンドウ (新しいクエリ ウィンドウ) の外でクエリを実行するだけで機能します。

于 2015-08-26T10:06:52.300 に答える
1

関数を作成し、DATETIME を DATE に変換する必要があるときにそれを使用できます。

USE [MyDatabaseName]
GO

IF EXISTS (
  SELECT * 
    FROM sys.objects 
   WHERE object_id = OBJECT_ID(N'[dbo].[FN_DateFromDateTime]')
   and  type in (N'FN')
)
   DROP FUNCTION [dbo].[FN_DateFromDateTime]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Codestalker
-- Create date: Mar 17, 2017
-- Edited date: Mar 17, 2017
-- Description: Return Date from DateTime.
-- =============================================
CREATE FUNCTION [dbo].[FN_DateFromDateTime]
(
    -- Add the parameters for the function here
    @InputDateTime DateTime
)
RETURNS Date
AS
BEGIN
        DECLARE @ReturnDate Date
        Set @ReturnDate = CONVERT(DATE, @InputDateTime)  
        Return @ReturnDate
END   
GO

次に、ビューで関数を呼び出して、DATETIME を変換します。

SELECT DateTimeColumn, dbo.FN_DateFromDateTime(DateTimeColumn) AS ConvertedDateTime
FROM dbo.MyTable

エラー メッセージは表示されず、再利用可能です。(SQL Server 2012 でテスト済み)

于 2017-03-17T12:23:43.037 に答える
0

このバグは、Management Studio 2016 にも存在します。クエリ デザイナーを使用する場合、現在のところ唯一の解決策は、varchar にキャストしてそれを使用することです。

于 2016-11-16T18:48:10.487 に答える
0

代わりに変換オプションを使用できます。

SELECT     ID, ScheduleID, ShiftDate, CONVERT(VARCHAR(10), ShiftDate,101) AS ProductionDate
FROM       dbo.ScheduleResults

ここで、日付形式のさまざまなオプションを確認できます。

于 2016-06-30T20:57:05.167 に答える
0

時々これはうまくいきます...

CAST(CAST(YourDate AS char(10)) AS Datetime)

(はい、日付ではないことはわかっていますが、一歩近づいています)

同じクエリでは、外側の選択では機能しましたが、すべてのユニオン内では機能しませんでした...

理由は聞かないでください:P

于 2015-06-12T09:35:56.567 に答える
0

この問題は、SSMS 18.4 にも存在します。私はそれを「アイデア」として Microsoft に送信しました。Microsoft のすべてのバグ レポートへの注意は、そのバグ レポートの社会的サポートに (のみ) 依存しているため、修正を希望する場合は、投票してください。

https://feedback.azure.com/forums/908035-sql-server/suggestions/41135050-ssms-returns-error-on-valid-query-in-view-designer

于 2020-08-13T02:04:10.287 に答える