Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SELECT * FROM table_name WHERE items = (УСЛОВИЕ) / 14 сообщений из 14, страница 1 из 1
01.06.2014, 10:14
    #38657931
Dimo Zorg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
Здравствуйте!

Подскажите пожалуйста, у меня в базе хранятся данные в определенном формате, например

id items desc
1 40:100 fish
2 20:30.5 temp

Можно ли задать такой запрос, который бы мог определить, входит ли разыскиваемое число в диапазон? Т к items имеет формат 40< x < 100, 20< x < 30.5

Т е написать запрос типа SELECT * FROM table_name WHERE items = (УСЛОВИЕ), где условие = 40< x < 100, где х будет передаваться в запрос. Поле items имеет тип char(128).

Пока у меня есть решение считывать все строчки и их в программе сортировать, но мне кажется в SQL можно как то обрабатывать данные на этапе выборки.

Спасибо.
...
Рейтинг: 0 / 0
01.06.2014, 10:30
    #38657936
Dimo Zorg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
Dimo Zorg,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
create table table_name (
  id        integer primary key,
  items      char(128) not null,
  decsr      char(128) null
);

insert into table_name values ( 1, "40:100", "fish" );
insert into table_name values ( 2, "20:30.5", "tv" );
...
Рейтинг: 0 / 0
01.06.2014, 15:05
    #38658001
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
Dimo Zorg,

Код: sql
1.
2.
3.
4.
select *
from table_name
where 30.2 between cast(substr(items, 1, instr(items, ':') - 1) as real)
               and cast(substr(items, instr(items, ':') + 1) as real)
...
Рейтинг: 0 / 0
01.06.2014, 15:18
    #38658007
Dimo Zorg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
VSVLAD,

Спасибо Вам огромное!
...
Рейтинг: 0 / 0
01.06.2014, 15:46
    #38658023
Dimo Zorg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
Dimo Zorg,

А если задачу усложнить и ввести дополнительное правило, скажем этих диапазонов может быть несколько и нужно проверить их все. Можно как-то обрабатывать до признака конца строки, если такое в базе вообще имеется, например:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
create table table_name (
  id        integer primary key,
  items      char(128) not null,
  decsr      char(128) null
);

insert into table_name values ( 1, "40:100,300:900,1000:1100", "fish" );
insert into table_name values ( 2, "20:30.5,200:300", "tv" );



Скажем, х = 1000 и я должен вывести 1 строку.

Спасибо!
...
Рейтинг: 0 / 0
01.06.2014, 16:18
    #38658037
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
Dimo Zorg,

Можно определить длину строки с помощью функции Length(). Если всё же планируется в таком виде размещать данные в базе, то в приложении (точно на: C++, .NET, PHP) можно написать пользовательскую функцию которая распарсит данные и зарегистрировать данную функцию как SQLite функцию и использовать в запросах. Можно и на голом SQL сделать, но будет больше кода и сложно его сопровождать
...
Рейтинг: 0 / 0
01.06.2014, 16:54
    #38658058
Dimo Zorg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
VSVLAD,

Еще раз спасибо Вам, понятно, в какую сторону смотреть!
...
Рейтинг: 0 / 0
01.06.2014, 17:04
    #38658068
VSVLAD
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
Dimo Zorg,

Пока есть время свободное, да и вспомнить не помешает мне, пример на VB.NET с пользовательской функцией SQLite.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
Module Module1

    Sub Main()

        Dim SQLCn As New SQLite.SQLiteConnection("data source=:memory:")
        SQLCn.Open()

        Dim SQLCmd As SQLite.SQLiteCommand = SQLCn.CreateCommand()
        SQLCmd.CommandText = "create table table_name (" &
                                "id        integer primary key," &
                                "items      char(128) not null," &
                                "decsr      char(128) null" &
                            ");" &
                            "insert into table_name values ( 1, '40:100,300:900,1000:1100', 'fish' );" &
                            "insert into table_name values ( 2, '20:30.5,200:300', 'tv' );"
        SQLCmd.ExecuteNonQuery()

        SQLCmd = SQLCn.CreateCommand()
        SQLCmd.CommandText = "select decsr from table_name where InRange(items, 300) = 1" 'Используем нашу функцию

        Dim SQLRead As SQLite.SQLiteDataReader = SQLCmd.ExecuteReader()
        Do While SQLRead.Read()
            Console.WriteLine(SQLRead.GetString(0))
        Loop

        Console.ReadLine()
    End Sub



End Module

'Классу добавляем аттрибут указывающий что это SQLite функция, также наследуем абстрактный класс и переопределяем
<SQLite.SQLiteFunction("InRange", 2, SQLite.FunctionType.Scalar)>
Public Class SQLiteInRange
    Inherits SQLite.SQLiteFunction

    Public Overrides Function Invoke(args() As Object) As Object
        Dim sItems As String = Convert.ToString(args(0))
        Dim iValue As Integer = Convert.ToInt32(args(1))

        'Здесь закладываем логику
        For Each xItem In sItems.Split(",")
            Dim arrNumbers() As String = xItem.Split(":")

            If iValue >= Convert.ToDouble(arrNumbers(0).Replace(".", ",")) And iValue <= Convert.ToDouble(arrNumbers(1).Replace(".", ",")) Then
                Return True
            End If
        Next

        Return False
    End Function
End Class
...
Рейтинг: 0 / 0
16.06.2014, 16:18
    #38670674
Dimo Zorg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
VSVLAD,

Спасибо Вам, очередной раз! Я решил задачу понятным мне способом, отсеял сам программно, только добрался до чтения документации и попробовать реализовать в SQLite. Но VB.NET мне незнаком, я все в Си делаю. Но Ваше решение мне нравится и кажется изящным. Попробую переварить =)
...
Рейтинг: 0 / 0
16.06.2014, 17:51
    #38670798
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
А в Си это все еще проще.
Читать тут: http://sqlite.org/c3ref/create_function.html
...
Рейтинг: 0 / 0
17.06.2014, 05:35
    #38671146
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
Dimo ZorgА если задачу усложнить ...
Перед усложнением задачи неплохо бы было "прокачаться" в области теории баз данных. На данном этапе твоего развития очень не помешает почитать про нормальные формы, понять что это, зачем нужно, а главное - научится применять на практике полученные знания. Иначе так и будешь всю жизнь изобретать кривые велосипеды.
...
Рейтинг: 0 / 0
17.06.2014, 10:57
    #38671406
Dimo Zorg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
Добрый Э - Эх, давайте без философии и пафоса...
...
Рейтинг: 0 / 0
17.06.2014, 11:25
    #38671451
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
Dimo Zorg,

где ты увидел философию и пафос? это был совет от чистого сердца...
с другой стороны, если тебе нравится суп есть вилкой и носить воду в дуршлаге, то это, конечно же, твое личное право. настаивать на ином не собираюсь ;)
...
Рейтинг: 0 / 0
17.06.2014, 15:21
    #38671907
Dimo Zorg
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SELECT * FROM table_name WHERE items = (УСЛОВИЕ)
White OwlА в Си это все еще проще.
Читать тут: http://sqlite.org/c3ref/create_function.html

Действительно элементарно! Спасибо!!!
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / SELECT * FROM table_name WHERE items = (УСЛОВИЕ) / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]