ネットが遅くてイライラしてない!?

SQLサーバー2008を使用しています。
SQL文のwhere句で
直前のアイテムの1回以上の繰り返しを意味するメタ文字を教えてください。
Postgresqlであれば、0回以上だと「*」、1回以上だと「+」だと思うのですが、
SQLサーバーだと何にあたるのでしょうか?

ぐぐって検索してみたのですが、見つかりませんでした。
どうかよろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qフィールドの値が数値かどうか調べる

varchar(2)のフィールドがあります。
値は必ず二文字入力されています。
値が数値の時は数値以外かを判断できますか?


(用途)
コンボボックスのソースに下記の様に指定したいのです。

select * from T_品種 where 品種コード 「が数字だったら」

よろしくお願いします。

Aベストアンサー

where isnumeric(品種コード) = 1

Q空白文字を含む文字列データの検索

検索したいデータに空白がある時空白のない検索文字列でlike検索して
データがヒットするようにしたいです

col1

NTTデ ー タ
NTTデ - タ シ ス テ ム ズ
NTTデ ー タ ク オ リ テ ィ
日立製作所
IBM

このようなカラムのデータが入っているとします
※空白を含むデータや空白を含まないデータがあるとします

これを select * from table1 where col1 like '%NTTデータシス%'
とするとNTTデ ー タ シ ス テ ム ズが検索されるようにしたいと思っています。

replace関数を使って実現しようと思ったのですが
SELECT REPLACE(col1,' ','') as col1 From table1 where col1 like '%システムズ%'
これだとデータがヒットせず単純に表示するときに空白が削除されるだけです
どうすれば空白を含むデータを検索することができるでしょうか


できれば全角・半角両方を含む文字のデータでも検索できるようにしたいです
SQLServer 2005を利用しています。

検索したいデータに空白がある時空白のない検索文字列でlike検索して
データがヒットするようにしたいです

col1

NTTデ ー タ
NTTデ - タ シ ス テ ム ズ
NTTデ ー タ ク オ リ テ ィ
日立製作所
IBM

このようなカラムのデータが入っているとします
※空白を含むデータや空白を含まないデータがあるとします

これを select * from table1 where col1 like '%NTTデータシス%'
とするとNTTデ ー タ シ ス テ ム ズが検索されるようにしたいと思っています。

replace関数を使って実現し...続きを読む

Aベストアンサー

>SELECT REPLACE(col1,' ','') as col1 From table1 where col1 like '%システムズ%'

SELECT句とWHERE句は別物です。以下のようにWHERE句でREPLACEを指定してください。
※SQLの解釈上、WHERE句が先に解釈されて対象データを特定しSELECT句の指示に従いデータを抽出します。

SELECT REPLACE(col1,' ','') as col1 From table1 where REPLACE(col1,' ','') like '%システムズ%'


create table table1
(
col1 varchar(100)
);

insert into table1 values('NTTデ ー タ');
insert into table1 values('NTTデ - タ シ ス テ ム ズ');
insert into table1 values('NTTデ ー タ ク オ リ テ ィ');
insert into table1 values('日立製作所');
insert into table1 values('IBM');


SELECT REPLACE(col1,' ','') as col1 From table1 where col1 like '%システムズ%';

col1
------------------
(0 行処理されました)

SELECT REPLACE(col1,' ','') as col1 From table1 where REPLACE(col1,' ','') like '%システムズ%';

col1
------------------
NTTデ-タシステムズ

(1 行処理されました)


>できれば全角・半角両方を含む文字のデータでも検索できるようにしたいです
SQL Serverの設定は「全角半角を区別する」になってますか?
区別しない設定なら、そのままでOKです。
区別する設定になっているならREPLACEを二度がけすればよいと思います。
where REPLACE(REPLACE(col1,' ',''),' ','') like '%システムズ%'

>SELECT REPLACE(col1,' ','') as col1 From table1 where col1 like '%システムズ%'

SELECT句とWHERE句は別物です。以下のようにWHERE句でREPLACEを指定してください。
※SQLの解釈上、WHERE句が先に解釈されて対象データを特定しSELECT句の指示に従いデータを抽出します。

SELECT REPLACE(col1,' ','') as col1 From table1 where REPLACE(col1,' ','') like '%システムズ%'


create table table1
(
col1 varchar(100)
);

insert into table1 values('NTTデ ー タ');
insert into table1 values('NTTデ -...続きを読む

QSQL 全角半角混在の文字列から半角数字のみを抜き出す

以下のようなことを「SQL文のみ」で行いたいのですが、
どなたかご教授のほどお願い致します。

下記のような変換前の文字列があるとします。
それを変換後のような形式にしたいのですが可能でしょうか?
■変換前
→2721111千葉県浦安市3-3-3浦安マンション222

■変換後
→2721111333222

要するに数字だけを抜き出したいのですが
できますでしょうか。

REGEXPのような正規表現は使用できないようです、
oracle9iです。

恐れ入りますが、よろしくお願いします。

Aベストアンサー

数値のみピックアップするのは無理矢理出来ます。

select
replace(translate(:対象文字列,replace(translate(:対象文字列,'0123456789','0'),''),'x'),'x','')
from dual;

*「:対象文字」の部分を格納している項目や変数に読み替えてください。

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

Q文字列をsplitするSQL文を教えて下さい

SQLServer2000上で指定した文字で文字列をsplitような関数があれば教えて頂けますか?

例えば"12345.6789"という文字列を"."(ピリオド)を指定して、"12345"と"6789"という2つの文字列を取得したいと思っています。

Transact-SQLの関数リファレンスを見てみたのですが、適当なものが見つかりませんでした。
自作するしかないのでしょうか・・

Aベストアンサー

見当たりませんね~。

declare @str1 nvarchar(1),@str2 nvarchar(50)
select @str1 =N'.',@str2 = N'12345.6789'
select
substring(@str2,1,charindex(@str1,@str2)-1) as 前,
substring(@str2,charindex(@str1,@str2)+1,len(@str2)-charindex(@str1,@str2)) as 後

こんな感じにしかできないみたいです

Qカラム情報取得方法

テーブル内のカラム情報を取得するにはどのようなSQLを作ればよいのでしょうか?
欲しい情報は「カラム名・主キーかどうか・データ型・桁数・NULLを許容かどうか」の5つとなります。

SQL Server は2005と2008を使用していて、どちらでも扱えるSQLがあると助かります。

どうぞ宜しくお願いいたします。

Aベストアンサー

昔、以下のSQLを作ったことがあります。2005では問題なかったです。
私の用はこれで足りたので必要に応じて修正してみてください。

SELECT
b.name as "Table名",
a.name as "カラム名",
c.name as "データ型",
a.column_id as "カラム順",
a.max_length as "データ長",
a.precision,
a.scale ,
case when a.is_nullable =0 then 'Null不可'
else 'NUll可' end as "NULL",
case when a.is_identity =0 then '×'
else '○' end as "オートナンバー",
case when a.default_object_id = 0 then '×'
else d.definition end as 'デフォルト値',
case when f.index_column_id is not null AND e.is_primary_key = 1 then 'PK'
else '×' end as 'PK'
FROM sys.columns as a
Left outer JOIN sys.objects as b
ON a.object_id = b.object_id
Left outer JOIN sys.types as c
ON a.system_type_id = c.system_type_id
Left outer JOIN sys.default_constraints as d
ON a.default_object_id = d.object_id
Left outer JOIN sys.indexes as e
ON a.object_id = e.object_id
AND e.is_primary_key = 1
Left outer JOIN sys.index_columns as f
ON a.object_id = f.object_id
AND a.column_id = f.column_id
WHERE b.type = 'U'
AND c.name != 'sysname'
ORDER BY b.name,a.column_id

昔、以下のSQLを作ったことがあります。2005では問題なかったです。
私の用はこれで足りたので必要に応じて修正してみてください。

SELECT
b.name as "Table名",
a.name as "カラム名",
c.name as "データ型",
a.column_id as "カラム順",
a.max_length as "データ長",
a.precision,
a.scale ,
case when a.is_nullable =0 then 'Null不可'
else 'NUll可' end as "NULL",
case when a.is_identity =0 then '×'
else '○' end as "オート...続きを読む

Qスペースを検索したい

SQLで空白を検索するのは is nullだと思うのですが、
スペースを検索する方法ってありますか?
二つのパターンを区別して検索をかけたいのですが。

Aベストアンサー

「is null」は「null」を検索するものであって、
「空白を検索」するものではありません。

スペースの検索は、
<検索対象> like '% %'
です。
(%の間は全角スペース若しくは半角スペースです。
検索対象スペースに合わせてください。)

QSQL Server のキャラクターセット(内部文字コード)は何処で定義するのでしょうか?

SQL Server超初心者です。(Oracleについては約1年ちょっとの経験はあります)どうぞよろしくお願いします。
今回SQL Server2005 を使って簡単なシステムを構築する事になりました。
SQL Serverが扱う文字コートについて教えてください。
Oracleを使っていた時の経験としてDB内部のキャラクターセットと
クライアントで使う文字セット(NLS_LANG)を意識しておかないと、いろんな「文字化け」問題に遭遇した時に対応できませんでした。
きっとSQL Serverにおいても同じような事ではないかと思いここに質問させていただきます。
以下2点についてどなたかコメント願います。
1.(Oracleでいうキャラクターセット)はどこで定義するのでしょうか?
2.OracleでいうNLS_LANGに相当するものはあるのでしょうか?
 (ひょっとしたらマイクロソフト製品なのでサーバもクライアントもCP932固定なのでしょうか?)

根本的にはシステム構築する上で『極力文字化けに遭遇したくない』思い出このような質問をさせていただきました。
『文字化け』について注意点などありましたら合わせてコメントいただければ助かります。
以上よろしくお願いします。

SQL Server超初心者です。(Oracleについては約1年ちょっとの経験はあります)どうぞよろしくお願いします。
今回SQL Server2005 を使って簡単なシステムを構築する事になりました。
SQL Serverが扱う文字コートについて教えてください。
Oracleを使っていた時の経験としてDB内部のキャラクターセットと
クライアントで使う文字セット(NLS_LANG)を意識しておかないと、いろんな「文字化け」問題に遭遇した時に対応できませんでした。
きっとSQL Serverにおいても同じような事ではないかと思いここに質問...続きを読む

Aベストアンサー

Windowsのロケールの設定を日本語にした状態でSQLServerをインストールした場合、cp932がデフォルトの照合順序になります。照合順序については参考URLをご覧下さい。

SQLServerではわかりませんが、PostgresではJDBCドライバ部分で変換していたように記憶しています。ODBCドライバではAutoTranslateという機能があります。

このため、ODBC接続で何も考えずにvarcharを使用するとcp932になります。

参考URL:http://www.microsoft.com/japan/msdn/sqlserver/sql2005/bb330962.aspx

Q型 varchar から型 numeric への変換エラー。

SQLクエリアナライザを使って、あるデータベースからLEFT JOINなどを駆使し、条件にそってデータを抽出しようと必死でやっております。
今まではうまく取得できていたのに、”型 varchar から型 numeric への変換エラー。”というエラーがでるようになりました。
前回とテーブルのデータを比較してみると、IsNULL(chrShokuhinCD,'') as chrShokuhinCDで引っ掛かっているようです。
この項目には空白(スペース)が入ったデータが最近存在しているのが原因だと思うのですが。。。
空白だったとき、IsNULL(chrShokuhinCD,'') as chrShokuhinCDはどのように修正すればよいでしょうか?教えてください。

Aベストアンサー

>空白だったとき、IsNULL(chrShokuhinCD,'') as chrShokuhinCDはどのように修正すればよいでしょうか?

では質問です。
空白だったとき、どんな数値として扱えばいいでしょうか?

これで何を入れればいいかわかると思いますが。

Q文字列からアルファベットだけを抜き出すには

以下のようなSELECT文を実行して

SELECT 船名 FROM 船マスタ

以下のような結果が返ってくるDBがあります。
船名はNVARCHAR型です。

船名
-------------
A800BCC
A800BCD
800BDC



この表示結果をアルファベット部分だけ(ABCC、ABCD、BDCみたいな)
にしたいのですが、そのような関数も用意されて無い様で
考え方すら浮かんできません。

格納されているデータからアルファベット部分または数字部分だけを
抜き出して表示する事は可能でしょうか?
よろしくお願いします。

Aベストアンサー

結論から言うと、ご希望の関数はありません。
mid関数で文字をひとつずつ検査してアルファベット化どうかを判断する自前関数を作るしかありません。

create procedure alpha @moji varchar(100)
as

declare @kekka varchar(100)
declare @i int

set @kekka = ''
set @i=1
while @i<=len(@moji)
begin
if substring(@moji,@i,1) >='a' and substring(@moji,@i,1)<='Z'
set @kekka = @kekka + substring(@moji,@i,1)
set @i=@i+1
end



select @kekka


人気Q&Aランキング