佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

12
返回列表 发新帖
楼主: musxell

Ms SQL Server 2005 如何用subtring才能解决我找出日期?

[复制链接]
发表于 14-11-2008 01:27 PM | 显示全部楼层
原帖由 musxell 于 14-11-2008 09:18 AM 发表


给错,wrong information
Ce.He 15/10/2008 4:13
现在的input是以上那样,日期的format是dd/mm/yyyy hh:mm
SQL server里面接受 mm/dd/yyyy,我就瓜在这里了
google找不到dd/mm/yyyy hh:mm可以直接conver ...

  1. DECLARE @input varchar(50)
  2. DECLARE @rev VARCHAR(50)
  3. DECLARE @tempDate VARCHAR(50)

  4. SET @input = 'Ce.He 15/10/2008 4:13 PM'

  5. -- Start extracting the date from input string --
  6. SET @rev = REVERSE(@input)
  7. SELECT @tempDate = CAST(REVERSE(SUBSTRING(@rev, 0, charindex(' ',@rev, CHARINDEX('/', @rev,0)))) AS VARCHAR)

  8. DECLARE @first INT
  9. DECLARE @second INT
  10. DECLARE @len INT
  11. DECLARE @newDate varchar(50)
  12. DECLARE @result DATETIME

  13. SELECT @first = CHARINDEX('/', @tempDate, 0)
  14. SELECT @second = CHARINDEX('/', @tempDate, @first+1)
  15. SELECT @len = LEN(@input)

  16. SELECT @newDate = SUBSTRING(@tempDate, @first+1, @second-@first-1)+'-' + SUBSTRING(@tempDate, 1, @first-1) + '-' + SUBSTRING(@tempDate, @second+1, @len-@second)

  17. SELECT @result = CAST(@newDate as DATETIME)
复制代码


这个应该是你所要得,可能方法不是很正确
@result 是 DateTime, 所以你要如何的格式都可以
用 CONVERT(varchar(50), @result, 100), 会得到 "Oct 15 2008  4:13PM"
请参考User Help
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 14-11-2008 04:43 PM | 显示全部楼层
原帖由 sfkwan 于 14-11-2008 01:27 PM 发表


DECLARE @input varchar(50)
DECLARE @rev VARCHAR(50)
DECLARE @tempDate VARCHAR(50)

SET @input = 'Ce.He 15/10/2008 4:13 PM'

-- Start extracting the date from input string --
SET @rev = REVE ...


想问你下
为什么没有result的?
出了这句Command(s) completed successfully.

我加一句这个RETURN @result
会有问题哦
A RETURN statement with a return value cannot be used in this context.
为什么不能用呢?
回复

使用道具 举报

发表于 14-11-2008 05:20 PM | 显示全部楼层
原帖由 musxell 于 14-11-2008 04:43 PM 发表


想问你下
为什么没有result的?
出了这句Command(s) completed successfully.

我加一句这个RETURN @result
会有问题哦
A RETURN statement with a return value cannot be used in this context.
...


应该是你的Syntax错了
比较你现在用的Script 和以下的,你就会看到问题了

  1. CREATE FUNCTION test
  2. (
  3.      @input varchar(50)
  4. )
  5. RETURNS DATETIME
  6. AS
  7. BEGIN
  8.     DECLARE @rev VARCHAR(50)
  9.     DECLARE @tempDate VARCHAR(50)
  10.     DECLARE @first INT
  11.     DECLARE @second INT
  12.     DECLARE @len INT
  13.     DECLARE @newDate varchar(50)
  14.     DECLARE @result DATETIME

  15.     -- Start extracting the date from input string --
  16.     SET @rev = REVERSE(@input)
  17.     SELECT @tempDate = CAST(REVERSE(SUBSTRING(@rev, 0, charindex(' ',@rev, CHARINDEX('/', @rev,0)))) AS VARCHAR)


  18.     SELECT @first = CHARINDEX('/', @tempDate, 0)
  19.     SELECT @second = CHARINDEX('/', @tempDate, @first+1)
  20.     SELECT @len = LEN(@input)

  21.     SELECT @newDate = SUBSTRING(@tempDate, @first+1, @second-@first-1)+'-' + SUBSTRING(@tempDate, 1, @first-1) + '-' + SUBSTRING(@tempDate, @second+1, @len-@second)

  22.     RETURN CAST(@newDate as DATETIME)
  23. END
复制代码
回复

使用道具 举报

 楼主| 发表于 14-11-2008 10:33 PM | 显示全部楼层
原帖由 sfkwan 于 14-11-2008 05:20 PM 发表


应该是你的Syntax错了
比较你现在用的Script 和以下的,你就会看到问题了

CREATE FUNCTION test
(
     @input varchar(50)
)
RETURNS DATETIME
AS
BEGIN
    DECLARE @rev VARCHAR(50)
    DECLARE  ...


原来如此
因为我没有加create那段

  1. DECLARE @input varchar(50)
  2. DECLARE @length int
  3. DECLARE @i int
  4. DECLARE @count int

  5. SET @input = 'Ce He 10/15/2008 4:13 PM'
  6. SET @length = len(@input)
  7. SET @count = 0
  8. SET @i=@length

  9. WHILE @i>0
  10. BEGIN
  11. IF SUBSTRING(@input, @i, 1) = ' '
  12. BEGIN
  13. SET @count = @count + 1
  14. IF @count = 3
  15. BEGIN
  16. SELECT CAST(SUBSTRING(@input, @i+1, @length-@i+1) AS DATETIME)
  17. END

  18. END
  19. SET @i = @i - 1
  20. END
复制代码


以上的为什么没有return还是会有return column的?
是不是加SET?
回复

使用道具 举报

发表于 14-11-2008 11:02 PM | 显示全部楼层
原帖由 musxell 于 14-11-2008 10:33 PM 发表


原来如此
因为我没有加create那段

DECLARE @input varchar(50)
DECLARE @length int
DECLARE @i int
DECLARE @count int

SET @input = 'Ce He 10/15/2008 4:13 PM'
SET @length = len(@input)
S ...


不好意思,不是很明白你的问题
回复

使用道具 举报

 楼主| 发表于 17-11-2008 09:13 AM | 显示全部楼层
原帖由 sfkwan 于 14-11-2008 11:02 PM 发表


不好意思,不是很明白你的问题



看上面的图片
会直接return value,但它不是function
如何办到的呢?
回复

使用道具 举报

Follow Us
发表于 17-11-2008 01:56 PM | 显示全部楼层
原帖由 musxell 于 17-11-2008 09:13 AM 发表



看上面的图片
会直接return value,但它不是function
如何办到的呢?


架设你已经有Create了23楼的 test function
你只要在Query Analyzer execute SELECT test ('Ce.He 15/10/2008 4:13 PM') 即可
回复

使用道具 举报

 楼主| 发表于 19-11-2008 10:11 AM | 显示全部楼层
原帖由 sfkwan 于 17-11-2008 01:56 PM 发表 架设你已经有Create了23楼的 test function你只要在Query Analyzer execute SELECT test ('Ce.He 15/10/2008 4:13 PM') 即可
 
原来如此
对了,可否知道你在哪个领域的呢?
回复

使用道具 举报


ADVERTISEMENT

发表于 20-11-2008 01:21 AM | 显示全部楼层
原帖由 musxell 于 19-11-2008 10:11 AM 发表

原来如此
对了,可否知道你在哪个领域的呢?


IT 打杂
回复

使用道具 举报

 楼主| 发表于 20-11-2008 07:19 AM | 显示全部楼层
原帖由 sfkwan 于 20-11-2008 01:21 AM 发表


IT 打杂

不要謙虛咧
IT Admin ?
還是programmer + support ?

這樣我也是打雜的咯,包山包海
回复

使用道具 举报

发表于 20-11-2008 10:53 PM | 显示全部楼层
原帖由 musxell 于 20-11-2008 07:19 AM 发表

不要謙虛咧
IT Admin ?
還是programmer + support ?

這樣我也是打雜的咯,包山包海


基本上什么都要做
目前的主要Project是做
Server Maintenance & Monitor, Helpdesk support, Application Support, Service Request, Testing, Report. 这个Project 很麻烦,因为连通很多不同Platform的System而且都蛮旧了.
另一个Project 也是 Support & Maintenance Stage
不过就比较简单,只是Application Support  & Service Request 而已, 别的公司负责Server Maintenance
不过还在奋斗着Crystal Report & MSSQL performance tuning
偶尔也客串别的Project做Prototype/ R&D/ Maintenance/ Support
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 22-12-2025 12:52 AM , Processed in 0.137115 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表