Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
 Re: помогите разобраться с датой в MS SQL2000  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
Atsha
1. на сколько я знаю ms sql работает с датой как со строкой, если можете - предложите свой вариант обработки даты
Ошибочные знания.
Atsha
2. вообще то процедура вызывается с параметрами:
EXEC ИМЯ_ПРОЦЕДУРЫ ПАРАМЕТР1, ПАРАМЕТР2
в качестве параметров у меня дата начала и дата конца
Вот упертый...
Вам вот об этом толкуют -- Command Object Parameters
25 окт 12, 11:00    [13372820]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
Atsha
Member

Откуда:
Сообщений: 49
Maxx
Atsha,
панимаеш - тебе сказали совершено обратное,но тебе даже лень прочитать все что тебе написали :((
Про параметры - было ,так ето про свойства АДО или NET или через чего еще ты там вызываеш просиду ,но те влом быоо хелп почитать даже :( там у команда есть парметры в которые и нужно пыжевать все при вызову хранимки сраху с правильным типом данных

Просиду мож хоть 5 раз перписывть - у тя там датетай с датетайм сравниваться там все ОК ,а вот с клиента ты хрень пихаеш - те ето уже 10 раз написали ,но те пох - ты не читатель :((

но ТЕ даже лень подумать -решение твоих гроаблей те уже 3 раза здесь написали -

блин ну и молодеж пошла


Давайте все таки на Вы, мы с вами не знакомы, за одним столом не сидели и на брудершафт не пили, потому немного уважения не помешает.

На счет передачи параметров с клиента - серверу: я допускаю что не учитываю какую то деталь в свойствах ADO, но у меня перед глазами есть работающий отчет, который делает все тоже самое за исключением исполняемого запроса. Передача параметров в нем осуществляется точно также и все работает без проблем и совершенно не понятно, где кроется ошибка.
25 окт 12, 11:22    [13372969]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
Glory
Member

Откуда:
Сообщений: 104760
Atsha
и совершенно не понятно, где кроется ошибка.

Вот именно, что вы даже не знаете, какая именно команда генерирует ошибку.
25 окт 12, 11:40    [13373147]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
Atsha
Member

Откуда:
Сообщений: 49
invm
Atsha
1. на сколько я знаю ms sql работает с датой как со строкой, если можете - предложите свой вариант обработки даты
Ошибочные знания.
Atsha
2. вообще то процедура вызывается с параметрами:
EXEC ИМЯ_ПРОЦЕДУРЫ ПАРАМЕТР1, ПАРАМЕТР2
в качестве параметров у меня дата начала и дата конца
Вот упертый...
Вам вот об этом толкуют -- Command Object Parameters

спасибо за ссылку, в моей программе используется VBS+ASP+HTML, соединение с БД выглядит следующим образом:
<%    ' Создание соединения с СУБД
    Set Connection = Server.CreateObject("ADODB.Connection")
    Connection.Open conODBCConnection

    Dim Connection, RetFile, SQLStmt, RS, PDoc
	Dim strStartDate, strEndDate, CurrentRecord

	strStartDate = Request("StartDate") 'начальная дата
	If strStartDate = "" Then
        ' Получение 1 января текущего года.
        SQLStmt = "SELECT Year = convert(varchar(10),convert(datetime,convert(varchar(4),DatePart(year, getdate()))),104) "
        Set RS = Nothing
        Set RS = Connection.Execute(SQLStmt)
        strStartDate = RS("Year")
    End If
	strEndDate = Request("EndDate") 'конечная дата
	If strEndDate = "" Then
        ' Получение текущей даты.
        SQLStmt = "SELECT Dt = convert(varchar(10), getdate(), 104)"
        Set RS = Nothing
        Set RS = Connection.Execute(SQLStmt)
        strEndDate = RS("Dt")
    End If
	
    SQLStmt = "SET NOCOUNT ON DECLARE @StartDate datetime, @EndDate datetime "
    SQLStmt = SQLStmt & "SELECT @StartDate = convert(datetime, '" & strStartDate & "', 104), @EndDate = convert(datetime, '" & strEndDate & "', 104) "
	SQLStmt = SQLStmt & "exec Appeal_error @StartDate, @EndDate " 

response.write SQLStmt
	Set RS = nothing
  	Set RS = Connection.Execute(SQLStmt)
%>
25 окт 12, 11:44    [13373173]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34619
Atsha,

Ещё рекомендую местный faq по читать на эту тему. Там хорошо прописано.
25 окт 12, 11:51    [13373228]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
Atsha
На счет передачи параметров с клиента - серверу: я допускаю что не учитываю какую то деталь в свойствах ADO, но у меня перед глазами есть работающий отчет, который делает все тоже самое за исключением исполняемого запроса. Передача параметров в нем осуществляется точно также и все работает без проблем и совершенно не понятно, где кроется ошибка.

http://msdn.microsoft.com/ru-ru/library/ms180878(v=SQL.105).aspx
Форматы строковых литералов влияют на представление данных в приложениях для пользователей, но не на базовый формат хранения целых чисел в SQL Server. Однако SQL Server может воспринять значение даты в формате строкового литерала, поставленное приложением или пользователем для хранения или для обработки функцией для работы с датами, как разные даты. То, как будет воспринято значение, зависит от сочетания формата строкового литерала, типа данных и следующих настроек времени выполнения: SET DATEFORMAT, SET LANGUAGE и параметр default language.
25 окт 12, 11:54    [13373247]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
Atsha
Member

Откуда:
Сообщений: 49
Glory
Atsha
пропущено...

хм...соединением таблиц...

Соединением таблиц поле получить нельзя.
Поле получается путем указания выражения в select
Но наверное ваш select настолько секретный, что просто глупо просить его опубликовать

текст вьюшки:
--если задание не имеет даты завершения, то эта дата становится максимальной 
CREATE VIEW dbo.VAppeal_Task
AS
SELECT     dbo.APPEAL.DocId, APPEAL.AppealRegDt, dbo.APPEAL.AppealIndex, dbo.APPEAL.AppealTypeId, MAX(CASE WHEN TASK_1.TaskEndDt IS NULL 
                      THEN '9999-12-31' ELSE TASK_1.TaskEndDt END) AS TaskEndDt
FROM         dbo.APPEAL JOIN
                      dbo.DOCUMENT ON DOCUMENT.DocId = APPEAL.DocId JOIN
                      dbo.TASK TASK ON TASK.DocId = DOCUMENT.DocId JOIN
                      dbo.TASK TASK_1 ON TASK.TaskId = TASK_1.PlanTaskId AND (TASK.PlanTaskId IS NULL)
WHERE     (DOCUMENT.IsVisible = 1) AND (APPEAL.AuthorCategoryId = 4) AND (dbo.APPEAL.AppealRegDt >= { ts '2011-08-01 00:00:00' })
GROUP BY APPEAL.AppealIndex, APPEAL.AppealRegDt, dbo.APPEAL.DocId, APPEAL.AppealTypeId

25 окт 12, 11:58    [13373273]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
Glory
Member

Откуда:
Сообщений: 104760
И какого же типа получилось поле
MAX(CASE WHEN TASK_1.TaskEndDt IS NULL THEN '9999-12-31' ELSE TASK_1.TaskEndDt END) AS TaskEndDt ?
25 окт 12, 12:02    [13373300]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
Напрашивается вопрос: "А разве бывает 31-й месяц"?
Если TASK_1.TaskEndDt не типа DATE, конечно.
25 окт 12, 12:07    [13373347]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
iap
Напрашивается вопрос: "А разве бывает 31-й месяц"?
Если TASK_1.TaskEndDt не типа DATE, конечно.
Хотя в SQL2000 (из заголовка темы) типа DATE ещё не было
25 окт 12, 12:11    [13373387]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
Atsha
Member

Откуда:
Сообщений: 49
Glory
И какого же типа получилось поле
MAX(CASE WHEN TASK_1.TaskEndDt IS NULL THEN '9999-12-31' ELSE TASK_1.TaskEndDt END) AS TaskEndDt ?


Думаю что поле имеет тип "datetime", т.к. на выходе получаются записи вида "9999-12-31 00:00:00,000"
25 окт 12, 12:30    [13373580]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
Glory
Member

Откуда:
Сообщений: 104760
Atsha
Думаю

А если не просто проверить, не "думая" ?
25 окт 12, 12:31    [13373588]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
Glory
Member

Откуда:
Сообщений: 104760
Atsha
т.к. на выходе получаются записи вида "9999-12-31 00:00:00,000"

Выше вы уверяли, что "в самом представлении(вьюшке) данное поле содержится в виде DD.MM.YYYY"
25 окт 12, 12:32    [13373597]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
AxuliON
Member

Откуда: оттуда, и на лыжах
Сообщений: 574
Atsha,
Ладно!
Видимо "достучаться" не получится.
Дата в SQL Server хранится как float, а никак не строка.

Вот пример ВАМ для вызова процедуры с параметром.
 Protected Function GetDatasetFromDB(ByVal sql As String, ByVal dt As Date) As DataSet
        'sql = "ЗДЕСЬ ИМЯ ХРАНИМОЙ ПРОЦЕДУРЫ!!!"
        Dim objConn As New SqlConnection
        objConn = data.GetConnectionHPSM()
        Dim objCommand As New SqlCommand(sql, objConn)
        objCommand.CommandType = CommandType.StoredProcedure
        objCommand.Parameters.Add("@dt_date", SqlDbType.DateTime).Value = dt
        Dim da As New SqlDataAdapter(objCommand)
        Dim ds As New DataSet
        da.Fill(ds)
        Return ds
    End Function
25 окт 12, 14:30    [13374542]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
AxuliON
Atsha,
Ладно!
Видимо "достучаться" не получится.
Дата в SQL Server хранится как float, а никак не строка.

Вот пример ВАМ для вызова процедуры с параметром.
 Protected Function GetDatasetFromDB(ByVal sql As String, ByVal dt As Date) As DataSet
        'sql = "ЗДЕСЬ ИМЯ ХРАНИМОЙ ПРОЦЕДУРЫ!!!"
        Dim objConn As New SqlConnection
        objConn = data.GetConnectionHPSM()
        Dim objCommand As New SqlCommand(sql, objConn)
        objCommand.CommandType = CommandType.StoredProcedure
        objCommand.Parameters.Add("@dt_date", SqlDbType.DateTime).Value = dt
        Dim da As New SqlDataAdapter(objCommand)
        Dim ds As New DataSet
        da.Fill(ds)
        Return ds
    End Function
Дата НЕ хранится как float.
Зачем утверждать, если не знаешь!
25 окт 12, 14:31    [13374558]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
AxuliON
Member

Откуда: оттуда, и на лыжах
Сообщений: 574
iap
AxuliON
Atsha,
Ладно!
Видимо "достучаться" не получится.
Дата в SQL Server хранится как float, а никак не строка.

Вот пример ВАМ для вызова процедуры с параметром.
 Protected Function GetDatasetFromDB(ByVal sql As String, ByVal dt As Date) As DataSet
        'sql = "ЗДЕСЬ ИМЯ ХРАНИМОЙ ПРОЦЕДУРЫ!!!"
        Dim objConn As New SqlConnection
        objConn = data.GetConnectionHPSM()
        Dim objCommand As New SqlCommand(sql, objConn)
        objCommand.CommandType = CommandType.StoredProcedure
        objCommand.Parameters.Add("@dt_date", SqlDbType.DateTime).Value = dt
        Dim da As New SqlDataAdapter(objCommand)
        Dim ds As New DataSet
        da.Fill(ds)
        Return ds
    End Function
Дата НЕ хранится как float.
Зачем утверждать, если не знаешь!


OK!
Я просто пытался объяснить человеку разницу между строкой и числом.
А я и не утверждаю - холивар устраивать не собираюсь.
Если Вам кажется, что хранится это дело в строке - мне Вас искренне ЖАЛЬ!
Вот Вам ответ из надежного источника.:

Значения типа datetime хранятся в виде 8-байтовых целых чисел. Первые четыре байта содержат количество дней до или после даты отсчета: 1 января 1900 года. Дата отсчета является системной датой. Вторые четыре байта содержат текущее значение времени, представленного в виде трехсотых долей секунды, прошедших после полуночи.
25 окт 12, 14:39    [13374629]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
Glory
Member

Откуда:
Сообщений: 104760
AxuliON
Вот Вам ответ из надежного источника.:

Значения типа datetime хранятся в виде 8-байтовых целых чисел. Первые четыре байта содержат количество дней до или после даты отсчета: 1 января 1900 года. Дата отсчета является системной датой. Вторые четыре байта содержат текущее значение времени, представленного в виде трехсотых долей секунды, прошедших после полуночи.

И где тут про float ?
25 окт 12, 14:47    [13374678]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
Atsha
Member

Откуда:
Сообщений: 49
Glory
Atsha
т.к. на выходе получаются записи вида "9999-12-31 00:00:00,000"

Выше вы уверяли, что "в самом представлении(вьюшке) данное поле содержится в виде DD.MM.YYYY"

хм...ваша правда...в тот раз я заходил на сам сервер и выводил на экран поля вьюшки из под него, а в этот раз я сделал запрос к серверу ч\з MS Query и он мне выдал значения именно в таком виде.
25 окт 12, 14:49    [13374695]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
Atsha
Member

Откуда:
Сообщений: 49
Glory
Atsha
Думаю

А если не просто проверить, не "думая" ?

к сожалению я не знаю как посмотреть тип данных полей вьюшки(буду углубляться в теорию), но могу точно утверждать, что таблицы из которых она получается имеют тип данных datetime
25 окт 12, 14:53    [13374714]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
Glory
Member

Откуда:
Сообщений: 104760
Atsha
хм...ваша правда...в тот раз я заходил на сам сервер и выводил на экран поля вьюшки из под него, а в этот раз я сделал запрос к серверу ч\з MS Query и он мне выдал значения именно в таком виде.

ну так мы узнаем уже, какого типа это поле в представлении ?
и какая конкретно команда вызывает ошибку ?

"И зайти на сам сервер" - невозможно. Вы наверное путаете клиентское приложение ManagamentStudio с сервером.
25 окт 12, 14:53    [13374719]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
iap
Member

Откуда: Москва
Сообщений: 46999
AxuliON
iap
пропущено...
Дата НЕ хранится как float.
Зачем утверждать, если не знаешь!


OK!
Я просто пытался объяснить человеку разницу между строкой и числом.
А я и не утверждаю - холивар устраивать не собираюсь.
Если Вам кажется, что хранится это дело в строке - мне Вас искренне ЖАЛЬ!
Вот Вам ответ из надежного источника.:

Значения типа datetime хранятся в виде 8-байтовых целых чисел. Первые четыре байта содержат количество дней до или после даты отсчета: 1 января 1900 года. Дата отсчета является системной датой. Вторые четыре байта содержат текущее значение времени, представленного в виде трехсотых долей секунды, прошедших после полуночи.
Хоть Вы меня пожалели! И на том спасибо!
25 окт 12, 14:57    [13374752]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
Atsha
Member

Откуда:
Сообщений: 49
Glory
"И зайти на сам сервер" - невозможно. Вы наверное путаете клиентское приложение ManagamentStudio с сервером.

Вы правы, путаю клиента с Enterprise Manager, извиняюсь
25 окт 12, 14:59    [13374767]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
Glory
Member

Откуда:
Сообщений: 104760
sp_help 'MyView'
25 окт 12, 15:04    [13374807]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
aWlad
Member

Откуда: Москва
Сообщений: 42
Atsha,

>>>>> "предлагаете переписать представление VAppeal_Task чтобы дата была там в виде YYYY-MM-DD ??"

Так точно. Строка вида 'YYYY-MM-DD' всегда распознается как дата (неявное преобразование). Строка вида 'DD.MM.YYY' требует явного преобразования.
25 окт 12, 15:43    [13375155]     Ответить | Цитировать Сообщить модератору
 Re: помогите разобраться с датой в MS SQL2000  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Atsha
Давайте все таки на Вы, мы с вами не знакомы, за одним столом не сидели и на брудершафт не пили, потому немного уважения не помешает.


да вообще не проблемма,могу и на Вы (как вас по отчеству не знаю) - только для Вас ето совершенно ничего не понменяет, ровно как и для меня
25 окт 12, 16:53    [13375780]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить