説明と呼ばれるテーブルにテキスト フィールドがあります。SQL Server 2005 ストアド プロシージャを使用して「~」文字が出現した場合に、この文字列から 2 つの日付フィールドを抽出したいと考えています。この場合、私を助けてください。
例: 文字列: '长期租金;10/1/2012 ~ 10/31/2012'. ~ 演算子の発生時に、from-date: 20121001 と to-date:20121031 が必要です。
説明と呼ばれるテーブルにテキスト フィールドがあります。SQL Server 2005 ストアド プロシージャを使用して「~」文字が出現した場合に、この文字列から 2 つの日付フィールドを抽出したいと考えています。この場合、私を助けてください。
例: 文字列: '长期租金;10/1/2012 ~ 10/31/2012'. ~ 演算子の発生時に、from-date: 20121001 と to-date:20121031 が必要です。
これが開始日と終了日を与えるメソッドです。ほとんどのテスト選択をそのままにしましたが、コメントアウトしました。
DECLARE @string AS NVARCHAR(255)
DECLARE @Seperator as char(1) = '~'
declare @CharStartDate as varchar(10)
declare @CharStopDate as varchar(10)
declare @StartDate as date
declare @StopDate as date
declare @I int
--SET @string = 'xvvvvvvcc;1/09/2012 ~ 1/10/2012xx'
--SET @string = 'xvvvvvvcc;12/31/2012 ~ 1/1/2012xx'
--SET @string = 'xvvvvvvcc;12/1/2012 ~ 10/0/2012xx'
SET @string = 'xvvvvvvcc;1/2/2012 ~ 1/3/2012xx'
--longest date 12/31/2011 = 10
--shortest date 1/1/2012 = 8
-- width of seperator = 3
SELECT
@CharStartDate = substring (@string, CHARINDEX(@Seperator,@string)-11,10)
,@CharStopDate = substring (@string, CHARINDEX(@Seperator,@string)+2,10)
--SELECT @CharStartDate,@CharStopDate
select @I = ascii(substring(@CharStartDate,1,1))
While @I > 57
BEGIN
set @CharStartDate = substring(@CharStartDate,2,10)
--select @CharStartDate
select @I = ascii(substring(@CharStartDate,1,1))
END
select @I = ascii(substring(REVERSE(@CharStopDate),1,1))
While @I > 57
BEGIN
set @CharStopDate = REVERSE(substring(REVERSE(@CharStopDate),2,10))
--select @CharStopDate
select @I = ascii(substring(REVERSE(@CharStopDate),1,1))
END
--select ascii(';'),ascii('9'),ascii('8'),ascii('7'),ascii('6'),ascii('6'),ascii('4'),ascii('3'),ascii('2'),ascii('1'),ascii('0')
SELECT @StartDate = @CharStartDate,@StopDate = @CharStopDate
--SELECT @I,@string,@Seperator,@CharStartDate,@CharStopDate,@StartDate,@StopDate
select datediff(dd,@StartDate,@StopDate) AS 'DateDiff',@StartDate as 'Start Date',@StopDate as 'Stop Date'
セパレーターの確認はお任せします。
この例では、次を使用できますが、実際には、チルダ (~) の文字列をテストするために exists 句またはそのようなものが必要です。チルダ (~)。必要に応じて、文字列を日時フィールドに変換できます。読みやすくするために、文字列を変数に入れました...
DECLARE @string AS NVARCHAR(255)
SET @string = '长期租金;10/1/2012 ~ 10/31/2012'
SELECT 開始日 = SUBSTRING(@string,CHARINDEX(';',@string)+1,LEN(@string)-CHARINDEX('~',@string)-1) ,EndDate = LTRIM(RIGHT(@string,LEN( @string)-CHARINDEX('~',@string)))
古いバージョンの SQL を使用したことがないので、卒業したばかりですが、EXTRACT() 関数がありませんか?.. 構文は次のようになります。
SELECT First_Name ,
EXTRACT ( CAST(Created_date AS DATE) FROM Created_date ) AS Date_only ;
「First_name」を指定して、それを列として使用することを SQL に知らせます。「created_date」は、日付を分離しようとしているフィールドです。キャスト関数は、フィールドを抽出する前に DATE 値に変換します。
これが役立つことを願っています。ありがとうございました。私が間違っている場合は、私に知らせてください。私は自分自身を改善したいと思っています。